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"
  • 次回までのTODO
    • RailsとRESTの関係
      • Railsが自動的にやってくれるのはどこまでなのか?
      • 自動化されることで、どんな手間が省けるのか?
      • ルートの(.:format)は何なのか?(Rails本P390にヒントあり)
    • ControllerとViewの関係
      • Viewを呼び出す方法(render/redirect_to/send_xxxの違い)
      • Viewを呼び出すタイミング(2回目のレンダリングでエラーが発生する点など)