Rails作業記録その5
これまで、Model作って、「db/migrate/001_create_items.rb」を編集して、「rake db:migrate」でテーブルを作成して、Controller作って、レイアウトを作成して、とやってきたわけですが、Rails2.0ではこのやり方はもう古いみたいです。(2.0じゃなくて1.2あたりからそうみたい)
Scaffoldを使う前に
わがバイブル(→http://www.amazon.co.jp/dp/4274066967?tag=noirandmomo-22)のP381によると、RESTfulなリソースベースのルーティングを使うScaffoldとして「scaffold_resource」があるので、これを使えばいいと書いてあります。
C:\www\test> ruby script/generate scaffold_resource Hoge title:string Couldn't find 'scaffold_resource' generator
がーん。ないって言われた。generate.rbのソースを見てもそれらしいものはないし、requireしている先もくまなく見て、関係すると思われるフォルダすべてに grepかけたけど見つからず。なにか重要なものをインストールのときに入れ忘れたか、もう一度入れ直すかと思いつつ、Googleさんにお伺いをたてたところ、「Rails2.0では以前の scaffold_resourceが scaffoldになりました」というありがたいご宣託が。よかったぁ。
Scaffoldを使う
問題ないことがわかったので、とりあえずテストしてみます。
C:\www\test> ruby script/generate scaffold Hoge title:string exists app/models/ exists app/controllers/ exists app/helpers/ create app/views/hoges exists app/views/layouts/ exists test/functional/ exists test/unit/ create app/views/hoges/index.html.erb create app/views/hoges/show.html.erb create app/views/hoges/new.html.erb create app/views/hoges/edit.html.erb create app/views/layouts/hoges.html.erb create public/stylesheets/scaffold.css dependency model exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/hoge.rb create test/unit/hoge_test.rb create test/fixtures/hoges.yml create db/migrate create db/migrate/001_create_hoges.rb create app/controllers/hoges_controller.rb create test/functional/hoges_controller_test.rb create app/helpers/hoges_helper.rb route map.resources :hoges
最後の「route map.resources :hoges」がRESTfulなリソースベースのルーティングを定義してくれるようです。
ルーティングの確認
scaffoldで作成されたルーティングを「rake routes」で確認してみます。
C:\www\test> rake routes (in C:/www/test) hoges GET /hoges {:controller=>"hoges", :action=>"index"} formatted_hoges GET /hoges.:format {:controller=>"hoges", :action=>"index"} POST /hoges {:controller=>"hoges", :action=>"create"} POST /hoges.:format {:controller=>"hoges", :action=>"create"} new_item GET /hoges/new {:controller=>"hoges", :action=>"new"} formatted_new_item GET /hoges/new.:format {:controller=>"hoges", :action=>"new"} edit_item GET /hoges/:id/edit {:controller=>"hoges", :action=>"edit"} formatted_edit_item GET /hoges/:id/edit.:format {:controller=>"hoges", :action=>"edit"} item GET /hoges/:id {:controller=>"hoges", :action=>"show"} formatted_item GET /hoges/:id.:format {:controller=>"hoges", :action=>"show"} PUT /hoges/:id {:controller=>"hoges", :action=>"update"} PUT /hoges/:id.:format {:controller=>"hoges", :action=>"update"} DELETE /hoges/:id {:controller=>"hoges", :action=>"destroy"} DELETE /hoges/:id.:format {:controller=>"hoges", :action=>"destroy"} /:controller/:action/:id /:controller/:action/:id.:format
「http://localhost/test/hoges」をGETでアクセスすると、indexアクションが動いて、POSTでアクセスすると、createアクションが動くということですね。
参考
- こちら(→[Rails 2.0 Preview]新機能いくつか: ぐうたら技術屋のTips)で scaffold_resourceが scaffoldになったことを知りました。ありがとうございます。