config/routes.rbの役割
前回の続き。FacebookApp本で、config/routes.rbを以下のように編集せよと書いてありました。
ActionController::Routing::Routes.draw do |map| map.root :controller=>"invitations", :action=>"new" map.resources :invitations end
これがどういうことなのか、ということを今回は追って行きたいと思います。「RailsによるアジャイルWebアプリケーション開発」を参考にしました。今後も参考にしていくと思います。
config/routes.rbに書かれた内容(アプリケーションのルーティング定義)は、ActionController::RoutingモジュールのRouteSetオブジェクトに読み込まれます。下記のようにすると、そのオブジェクトにアクセスすることができます。定義されているルートを確認するためには、このオブジェクトのroutesメソッドを呼び出せばよさそうです。
script/console ↓ rs = ActionController::Routing::Routes puts rs.routes
map.rootを使うと、以下のようなルートが定義されます。URLがルート指定された時に使われるコントローラなりアクションなりを指定してやるわけですね。
ANY / {:controller=>"invitations", :action=>"new"}
また、map.resourcesを使うと、以下のようなルートが定義されます。
GET /invitations(.:format)? {:controller=>"invitations", :action=>"index"} POST /invitations(.:format)? {:controller=>"invitations", :action=>"create"} GET /invitations/new(.:format)? {:controller=>"invitations", :action=>"new"} GET /invitations/:id/edit(.:format)? {:controller=>"invitations", :action=>"edit"} GET /invitations/:id(.:format)? {:controller=>"invitations", :action=>"show"} PUT /invitations/:id(.:format)? {:controller=>"invitations", :action=>"update"} DELETE /invitations/:id(.:format)? {:controller=>"invitations", :action=>"destroy"}
このmap.resoursesについては、Rails本の「リソースベースのルーティング(日本語版:P378)」に詳しく掲載されているので、後ほど掘り下げてみたいと思っています。
先ほどのRouteSetオブジェクトを使うことによって、ルーティングの動きを確認することも可能です。
rs.recognize_path "/" => {:controller=>"invitations", :action=>"new"} rs.generate :controller => :invitations, :action => :new => "/invitations/new"