Rails tutorialをためす2
Setting the Application Home Page
ひな形を消す
% cd ~/project/blog % rm public/index.html
config/routes.rbを編集して処理の振り分け先を変更します。
ひな形をちょっと変更します。
% perl -pi -e 's/# root :to => "welcome#index"/root :to => "home#index"/g' config/routes.rb
ここは使い慣れたPerlで…
WEBrickが起動していない場合は次のようにserverを起動して、次のURLをリクエストした場合に指定したControllerへRoutingされている事を確認します。
% rails server % open -a 'Google Chrome' 'http://localhost:3000'
Creating a Resource
で、やっとRuby on Railsらしさが出てくる箇所です。
% rails generate scaffold Post name:string title:string content:text invoke active_record create db/migrate/20110328132142_create_posts.rb create app/models/post.rb invoke test_unit create test/unit/post_test.rb create test/fixtures/posts.yml route resources :posts invoke scaffold_controller create app/controllers/posts_controller.rb invoke erb create app/views/posts create app/views/posts/index.html.erb create app/views/posts/edit.html.erb create app/views/posts/show.html.erb create app/views/posts/new.html.erb create app/views/posts/_form.html.erb invoke test_unit create test/functional/posts_controller_test.rb invoke helper create app/helpers/posts_helper.rb invoke test_unit create test/unit/helpers/posts_helper_test.rb invoke stylesheets create public/stylesheets/scaffold.css
この状態で以下のようにリクエストを行います。
% open -a 'Google Chrome' 'http://localhost:3000/posts'
ただし、まだDB上にtableが存在しないので以下のようなメッセージが表示されます。
SQLite3::SQLException: no such table: posts: SELECT "posts".* FROM "posts"
Running a Migration
マイグレーションはPerlでは存在しない概念だと思います。たぶん。
DBのschemaを差分管理しておき、元の状態に戻せるようにしている?
さきほどのrails generate scaffoldでmigration用のファイルも作成されています。
% cat db/migrate/*_create_posts.rb class CreatePosts < ActiveRecord::Migration def self.up create_table :posts do |t| t.string :name t.string :title t.text :content t.timestamps end end def self.down drop_table :posts end end
SQLのcreat文をrubyで記述しています。
なので次のようなrakeコマンドでDB上にtableが作成されます。
% rake db:migrate
DB上にテーブルが作成されたので確認
% open -a 'Google Chrome' 'http://localhost:3000/posts'
いわゆるListing画面が表示されているはずです。
といってもまだレコードが一個もないので何も表示されてませんが。
Adding a Link
TOPページからリンクを追加します。
% echo '<%= link_to "My Blog", posts_path %>' >> app/views/home/index.html.erb
ということで実はすでにPost(投稿)の一覧表示、詳細表示、追加、編集、削除を行う事ができるようになりました。
RailsのCRUD作成画面はある程度自動化して作成する事ができます。
http://localhost:3000/posts/new で新規作成画面が表示されますが、tableのcolumnがstringかtetかでinputかtextかを判断しています。
そういえば昔rails試したときにCRUD画面が自動的に作られているのに度肝を抜かれて同じ事ができるんじゃないかと思ってこんなものを作ってました。
http://coderepos.org/share/browser/lang/perl/SimpleCRUD/trunk/lib/SimpleCRUD.pm
なんというか青臭さがあふれ出ているソースコードです。
The Model
まだvalidationが存在しないのでこのロジックを追加します。
% vi app/models/post.rb
class Post < ActiveRecord::Base validates :name, :presence => true validates :title, :presence => true, :length => { :minimum => 5 } end
今日はここまで