2.0のmap.resourcesのオプション設定いろいろ

今までおろそかにしていた「ルート設定」ではあるが、Rails2.0からは避けて通ることができない*1と今更ながら思い直し、いろいろ試してみた。以下はその実験結果。

基本

  • 追加オプションなしの基本ルート設定map.resources :slipsによって、以下のルート規則が生成される。
  • ルート規則は上にあるものが優先される。
  • .:formatが付属する偶数No.の行は、http://XXXX.XXX/slips.xml等の拡張子付きのリクエストを、respond_toブロックで適切に処理するために存在する。
# ルート設定: config/routes.rb
ActionController::Routing::Routes.draw do |map|
  map.resources :slips
end
No. 名前付きルート名 メソッド URLパス書式 処理されるコントローラー、アクション URL例
1 slips GET /slips {:controller=>"slips", :action=>"index"} http://XXXX.XXX/slips
2 formatted_slips GET /slips.:format {:controller=>"slips", :action=>"index"} http://XXXX.XXX/slips.xml
3 POST /slips {:controller=>"slips", :action=>"create"} http://XXXX.XXX/slips
4 POST /slips.:format {:controller=>"slips", :action=>"create"} http://XXXX.XXX/slips.xml
5 new_slip GET /slips/new {:controller=>"slips", :action=>"new"} http://XXXX.XXX/slips/new
6 formatted_new_slip GET /slips/new.:format {:controller=>"slips", :action=>"new"} http://XXXX.XXX/slips/new.xml
7 edit_slip GET /slips/:id/edit {:controller=>"slips", :action=>"edit"} http://XXXX.XXX/slips/1/edit
8 formatted_edit_slip GET /slips/:id/edit.:format {:controller=>"slips", :action=>"edit"} http://XXXX.XXX/slips/1/edit.xml
9 slip GET /slips/:id {:controller=>"slips", :action=>"show"} http://XXXX.XXX/slips/1
10 formatted_slip GET /slips/:id.:format {:controller=>"slips", :action=>"show"} http://XXXX.XXX/slips/1.xml
11 PUT /slips/:id {:controller=>"slips", :action=>"update"} http://XXXX.XXX/slips/1
12 PUT /slips/:id.:format {:controller=>"slips", :action=>"update"} http://XXXX.XXX/slips/1.xml
13 DELETE /slips/:id {:controller=>"slips", :action=>"destroy"} http://XXXX.XXX/slips/1
14 DELETE /slips/:id.:format {:controller=>"slips", :action=>"destroy"} http://XXXX.XXX/slips/1.xml
読み方(No.7の場合)
No. 名前付きルート名 メソッド URLパス書式 処理されるコントローラー、アクション URL例
7 edit_slip GET /slips/:id/edit {:controller=>"slips", :action=>"edit"} http://XXXX.XXX/slips/1/edit
  • HTTPメソッドがGET、URLパス書式が/slips/:id/edit(URL例:http://XXXX.XXX/slips/1/edit)のリクエストを受けると...
    • slipsコントローラーのeditアクションで処理する。
    • params[:id]には"1"が代入される。
  • 名前付きルートedit_slip_urlとedit_slip_pathが利用できる。(@slipはidが1のSlipインスタンスの場合)
    • <%= edit_slip_url(@slip) %> ----> "http://XXXX.XXX/slips/1/edit"
    • <%= edit_slip_path(@slip) %> ---> "slips/1/edit"
    • 利用例: <%= link_to "Edit", edit_slip_path(@slip) %>
map.resourcesには、オプション指定によって、上記以外のルート規則を追加することができる。以下で、map.resources :slipsにオプション設定した時に追加されるルート規則を調べてみた。

HTTPメソッドの指定方法

ハッシュで指定
  • 「:member => {:アクション名 => :HTTPメソッド名}」の形式で指定すると、メソッドを限定したルート規則になる。
  • HTTPメソッド名には:get、:post、:put、:deleteまたは:anyを指定する。
  • :anyは、GET、POST、PUT、DELETEメソッドのすべてを対象にする。(「:member => 配列」の形式で指定するのと同等。)
# ルート設定: config/routes.rb
ActionController::Routing::Routes.draw do |map|
  map.resources :slips, :member=>{:test1=>:put, :test2=>:any}
end
No. 名前付きルート名 メソッド URLパス書式 処理されるコントローラー、アクション URL例
1 test2_slip /slips/:id/test2 {:controller=>"slips", :action=>"test2"} http://XXXX.XXX/slips/1/test2 :test2=>:anyによる
2 formatted_test2_slip /slips/:id/test2.:format {:controller=>"slips", :action=>"test2"} http://XXXX.XXX/slips/1/test2.xml :test2=>:anyによる
3 test1_slip PUT /slips/:id/test1 {:controller=>"slips", :action=>"test1"} http://XXXX.XXX/slips/1/test1 :test1=>:putによる
4 formatted_test1_slip PUT /slips/:id/test1.:format {:controller=>"slips", :action=>"test1"} http://XXXX.XXX/slips/1/test1.xml :test1=>:putによる
      • 上記は、追加されたルート規則のみ表示している。rake routesでは、基本ルート規則+上記の追加ルート規則が確認できる。
配列で指定
  • 「:member => [:アクション名]」の形式で指定すると、HTTPメソッド指定無し(GET、POST、PUT、DELETEメソッドのすべてが対象)のルート規則になる。
# ルート設定: config/routes.rb
ActionController::Routing::Routes.draw do |map|
  map.resources :slips, :member=>[:test1, :test2]
end
No. 名前付きルート名 メソッド URLパス書式 処理されるコントローラー、アクション URL例
1 test1_slip /slips/:id/test1 {:controller=>"slips", :action=>"test1"} http://XXXX.XXX/slips/1/test1
2 formatted_test1_slip /slips/:id/test1.:format {:controller=>"slips", :action=>"test1"} http://XXXX.XXX/slips/1/test1.xml
3 test2_slip /slips/:id/test2 {:controller=>"slips", :action=>"test2"} http://XXXX.XXX/slips/1/test2
4 formatted_test2_slip /slips/:id/test2.:format {:controller=>"slips", :action=>"test2"} http://XXXX.XXX/slips/1/test2.xml
      • 上記は、追加されたルート規則のみ表示している。rake routesでは、基本ルート規則+上記の追加ルート規則が確認できる。

:collection、:member、:newオプションの違い

  • :collectionでは、個別のidを指定できない。テーブル全体に働きかけるアクションを指定する。例: 伝票検索とか、最近登録された伝票の表示など。
  • :memberでは、個別のidを指定可能。一つのレコードに対して働きかけるアクションを指定する。例: 詳細情報の表示など。
  • :newでは、DBに未登録な新規作成中の入力フォーム対して働きかけるアクションを指定する。例: 新規作成中に合計金額を再計算をするなど。(:memberで設定したいが、新規のためidが指定できないときに:newで設定するという感じだろうか...。)
# ルート設定: config/routes.rb
ActionController::Routing::Routes.draw do |map|
  map.resources :slips, 
                :collection => [:test1],
                :member     => [:test2],
                :new        => [:test3]
end
No. 名前付きルート名 メソッド URLパス書式 処理されるコントローラー、アクション URL例
1 test1_slips /slips/test1 {:controller=>"slips", :action=>"test1"} http://XXXX.XXX/slips/test1 :collectionによる
2 formatted_test1_slips /slips/test1.:format {:controller=>"slips", :action=>"test1"} http://XXXX.XXX/slips/test1.xml :collectionによる
3 test2_slip /slips/:id/test2 {:controller=>"slips", :action=>"test2"} http://XXXX.XXX/slips/1/test2 :memberによる
4 formatted_test2_slip /slips/:id/test2.:format {:controller=>"slips", :action=>"test2"} http://XXXX.XXX/slips/1/test2.xml :memberによる
5 test3_new_slip /slips/new/test3 {:controller=>"slips", :action=>"test3"} http://XXXX.XXX/slips/new/test3 :newによる
6 formatted_test3_new_slip /slips/new/test3.:format {:controller=>"slips", :action=>"test3"} http://XXXX.XXX/slips/new/test3.xml :newによる
      • 上記は、追加されたルート規則のみ表示している。rake routesでは、基本ルート規則+上記の追加ルート規則が確認できる。
  • 名前付きルートの指定方法と内容(@slipはidが1のSlipインスタンスの場合)
    • <%= test1_slips_path %> -------> "/slips/test1"
    • <%= test2_slip_path(@slip) %> -> "/slips/1/test2"
    • <%= test3_new_slip_path %> ----> "/slips/new/test3"

has_manyな関連のルート設定

  • has_manyな関連をルート設定にも反映させることが可能。
ActionController::Routing::Routes.draw do |map|
  map.resources :slips, :has_many=>:journals
end
No. 名前付きルート名 メソッド URLパス書式 処理されるコントローラー、アクション URL例
1 slip_journals GET /slips/:slip_id/journals {:controller=>"journals", :action=>"index"} http://XXXX.XXX/slips/1/journals
2 formatted_slip_journals GET /slips/:slip_id/journals.:format {:controller=>"journals", :action=>"index"} http://XXXX.XXX/slips/1/journals.xml
3 POST /slips/:slip_id/journals {:controller=>"journals", :action=>"create"} http://XXXX.XXX/slips/1/journals
4 POST /slips/:slip_id/journals.:format {:controller=>"journals", :action=>"create"} http://XXXX.XXX/slips/1/journals.xml
5 new_slip_journal GET /slips/:slip_id/journals/new {:controller=>"journals", :action=>"new"} http://XXXX.XXX/slips/1/journals/new
6 formatted_new_slip_journal GET /slips/:slip_id/journals/new.:format {:controller=>"journals", :action=>"new"} http://XXXX.XXX/slips/1/journals/new.xml
7 edit_slip_journal GET /slips/:slip_id/journals/:id/edit {:controller=>"journals", :action=>"edit"} http://XXXX.XXX/slips/1/journals/2/edit
8 formatted_edit_slip_journal GET /slips/:slip_id/journals/:id/edit.:format {:controller=>"journals", :action=>"edit"} http://XXXX.XXX/slips/1/journals/2/edit.xml
9 slip_journal GET /slips/:slip_id/journals/:id {:controller=>"journals", :action=>"show"} http://XXXX.XXX/slips/1/journals/2
10 formatted_slip_journal GET /slips/:slip_id/journals/:id.:format {:controller=>"journals", :action=>"show"} http://XXXX.XXX/slips/1/journals/2.xml
11 PUT /slips/:slip_id/journals/:id {:controller=>"journals", :action=>"update"} http://XXXX.XXX/slips/1/journals/2
12 PUT /slips/:slip_id/journals/:id.:format {:controller=>"journals", :action=>"update"} http://XXXX.XXX/slips/1/journals/2.xml
13 DELETE /slips/:slip_id/journals/:id {:controller=>"journals", :action=>"destroy"} http://XXXX.XXX/slips/1/journals/2
14 DELETE /slips/:slip_id/journals/:id.:format {:controller=>"journals", :action=>"destroy"} http://XXXX.XXX/slips/1/journals/2.xml
  • 名前付きルートは以下のように指定できる。(@slipはidが1のSlipインスタンス、@journalはidが2のJournaインスタンスの場合)
    • <%= slip_journals_path(@slip) %> -----------------> "/slips/1/journals"
    • <%= edit_slip_journal_path(@slip, @journal) %> ---> "/slips/1/journals/2/edit"
  • 上記のmap.resources :slips, :has_many=>:journalsは、以下のネストしたルート設定と同等だ。
ActionController::Routing::Routes.draw do |map|
  map.resources :slips do |slip|
    slip.resources :journals
  end
end
  • ネストしたルート設定なら、オプション設定を加えれば、さらに以下のようなルート規則も同時に追加できる。
ActionController::Routing::Routes.draw do |map|
  map.resources :slips do |slip|
    slip.resources :journals, :member=>[:test1]
  end
end
No. 名前付きルート名 メソッド URLパス書式 処理されるコントローラー、アクション URL例
1 test1_slip_journal /slips/:slip_id/journals/:id/test1 {:controller=>"journals", :action=>"test1"} http://XXXX.XXX/slips/1/journals/2/test1
2 formatted_test1_slip_journal /slips/:slip_id/journals/:id/test1.:format {:controller=>"journals", :action=>"test1"} http://XXXX.XXX/slips/1/journals/2/test1.xml

:controller

  • 通常は、map.resources :slipsでは、リクエストはslipsコントローラーで処理される。
  • ところが、:controller=>'test'を追記することで、testコントローラーで処理されることになる。
# ルート設定: config/routes.rb
ActionController::Routing::Routes.draw do |map|
  map.resources :slips, :controller=>'test'
end

# rake routesの結果
              slips GET    /slips                  {:controller=>"test", :action=>"index"}
    formatted_slips GET    /slips.:format          {:controller=>"test", :action=>"index"}
                    POST   /slips                  {:controller=>"test", :action=>"create"}
                    POST   /slips.:format          {:controller=>"test", :action=>"create"}
           new_slip GET    /slips/new              {:controller=>"test", :action=>"new"}
 formatted_new_slip GET    /slips/new.:format      {:controller=>"test", :action=>"new"}
          edit_slip GET    /slips/:id/edit         {:controller=>"test", :action=>"edit"}
formatted_edit_slip GET    /slips/:id/edit.:format {:controller=>"test", :action=>"edit"}
               slip GET    /slips/:id              {:controller=>"test", :action=>"show"}
     formatted_slip GET    /slips/:id.:format      {:controller=>"test", :action=>"show"}
                    PUT    /slips/:id              {:controller=>"test", :action=>"update"}
                    PUT    /slips/:id.:format      {:controller=>"test", :action=>"update"}
                    DELETE /slips/:id              {:controller=>"test", :action=>"destroy"}
                    DELETE /slips/:id.:format      {:controller=>"test", :action=>"destroy"}

:requirements

  • パラメーターの書式が正規表現にマッチした場合だけ、そのルート規則が適用される。
  • 以下の例では、rake routesの結果に変化は無いが、:idを含むURL書式は、指定されたHTTPメソッドかつ、:idが1桁の数字の場合だけ、ルート規則が適用されることになる。(idが2桁以上、または数字以外では適用されない。その場合、デフォルトのmap.connect ':controller/:action/:id'が無い状況ではRouting Errorになる。)
# ルート設定: config/routes.rb
ActionController::Routing::Routes.draw do |map|
  map.resources :slips, :requirements=>{:id=>/\d/}
end

# rake routesの結果
              slips GET    /slips                           {:controller=>"slips", :action=>"index"}
    formatted_slips GET    /slips.:format                   {:controller=>"slips", :action=>"index"}
                    POST   /slips                           {:controller=>"slips", :action=>"create"}
                    POST   /slips.:format                   {:controller=>"slips", :action=>"create"}
           new_slip GET    /slips/new                       {:controller=>"slips", :action=>"new"}
 formatted_new_slip GET    /slips/new.:format               {:controller=>"slips", :action=>"new"}
          edit_slip GET    /slips/:id/edit                  {:controller=>"slips", :action=>"edit"}
formatted_edit_slip GET    /slips/:id/edit.:format          {:controller=>"slips", :action=>"edit"}
               slip GET    /slips/:id                       {:controller=>"slips", :action=>"show"}
     formatted_slip GET    /slips/:id.:format               {:controller=>"slips", :action=>"show"}
                    PUT    /slips/:id                       {:controller=>"slips", :action=>"update"}
                    PUT    /slips/:id.:format               {:controller=>"slips", :action=>"update"}
                    DELETE /slips/:id                       {:controller=>"slips", :action=>"destroy"}
                    DELETE /slips/:id.:format               {:controller=>"slips", :action=>"destroy"}

:path_prefix、:name_prefix

  • URLパス書式に'/slips/:slip_id'を付加する。
# ルート設定: config/routes.rb
ActionController::Routing::Routes.draw do |map|
  map.resources :journals, :path_prefix=>'/slips/:slip_id'
end

# rake routesの結果
              journals GET    /slips/:slip_id/journals                  {:controller=>"journals", :action=>"index"}
    formatted_journals GET    /slips/:slip_id/journals.:format          {:controller=>"journals", :action=>"index"}
                       POST   /slips/:slip_id/journals                  {:controller=>"journals", :action=>"create"}
                       POST   /slips/:slip_id/journals.:format          {:controller=>"journals", :action=>"create"}
           new_journal GET    /slips/:slip_id/journals/new              {:controller=>"journals", :action=>"new"}
 formatted_new_journal GET    /slips/:slip_id/journals/new.:format      {:controller=>"journals", :action=>"new"}
          edit_journal GET    /slips/:slip_id/journals/:id/edit         {:controller=>"journals", :action=>"edit"}
formatted_edit_journal GET    /slips/:slip_id/journals/:id/edit.:format {:controller=>"journals", :action=>"edit"}
               journal GET    /slips/:slip_id/journals/:id              {:controller=>"journals", :action=>"show"}
     formatted_journal GET    /slips/:slip_id/journals/:id.:format      {:controller=>"journals", :action=>"show"}
                       PUT    /slips/:slip_id/journals/:id              {:controller=>"journals", :action=>"update"}
                       PUT    /slips/:slip_id/journals/:id.:format      {:controller=>"journals", :action=>"update"}
                       DELETE /slips/:slip_id/journals/:id              {:controller=>"journals", :action=>"destroy"}
                       DELETE /slips/:slip_id/journals/:id.:format      {:controller=>"journals", :action=>"destroy"}
  • 名前付きルート名に「slip_」を付加する。
# ルート設定: config/routes.rb
ActionController::Routing::Routes.draw do |map|
  map.resources :journals, :name_prefix=>'slip_'
end

# rake routesの結果
              slip_journals GET    /journals                  {:controller=>"journals", :action=>"index"}
    formatted_slip_journals GET    /journals.:format          {:controller=>"journals", :action=>"index"}
                            POST   /journals                  {:controller=>"journals", :action=>"create"}
                            POST   /journals.:format          {:controller=>"journals", :action=>"create"}
           new_slip_journal GET    /journals/new              {:controller=>"journals", :action=>"new"}
 formatted_new_slip_journal GET    /journals/new.:format      {:controller=>"journals", :action=>"new"}
          edit_slip_journal GET    /journals/:id/edit         {:controller=>"journals", :action=>"edit"}
formatted_edit_slip_journal GET    /journals/:id/edit.:format {:controller=>"journals", :action=>"edit"}
               slip_journal GET    /journals/:id              {:controller=>"journals", :action=>"show"}
     formatted_slip_journal GET    /journals/:id.:format      {:controller=>"journals", :action=>"show"}
                            PUT    /journals/:id              {:controller=>"journals", :action=>"update"}
                            PUT    /journals/:id.:format      {:controller=>"journals", :action=>"update"}
                            DELETE /journals/:id              {:controller=>"journals", :action=>"destroy"}
                            DELETE /journals/:id.:format      {:controller=>"journals", :action=>"destroy"}
  • :path_prefixと:name_prefixの両方を使ったら...それってmap.resources :slips, :has_many=>:journalsと同じこと?...どうも同じことのようだ。
# ルート設定: config/routes.rb
ActionController::Routing::Routes.draw do |map|
  map.resources :journals, :path_prefix=>'/slips/:slip_id', :name_prefix=>'slip_'
end

# rake routesの結果
              slip_journals GET    /slips/:slip_id/journals                  {:controller=>"journals", :action=>"index"}
    formatted_slip_journals GET    /slips/:slip_id/journals.:format          {:controller=>"journals", :action=>"index"}
                            POST   /slips/:slip_id/journals                  {:controller=>"journals", :action=>"create"}
                            POST   /slips/:slip_id/journals.:format          {:controller=>"journals", :action=>"create"}
           new_slip_journal GET    /slips/:slip_id/journals/new              {:controller=>"journals", :action=>"new"}
 formatted_new_slip_journal GET    /slips/:slip_id/journals/new.:format      {:controller=>"journals", :action=>"new"}
          edit_slip_journal GET    /slips/:slip_id/journals/:id/edit         {:controller=>"journals", :action=>"edit"}
formatted_edit_slip_journal GET    /slips/:slip_id/journals/:id/edit.:format {:controller=>"journals", :action=>"edit"}
               slip_journal GET    /slips/:slip_id/journals/:id              {:controller=>"journals", :action=>"show"}
     formatted_slip_journal GET    /slips/:slip_id/journals/:id.:format      {:controller=>"journals", :action=>"show"}
                            PUT    /slips/:slip_id/journals/:id              {:controller=>"journals", :action=>"update"}
                            PUT    /slips/:slip_id/journals/:id.:format      {:controller=>"journals", :action=>"update"}
                            DELETE /slips/:slip_id/journals/:id              {:controller=>"journals", :action=>"destroy"}
                            DELETE /slips/:slip_id/journals/:id.:format      {:controller=>"journals", :action=>"destroy"}
  • 上記を応用すれば、こんなことも出来るらしい...。名前付きルート名から"slip_"を外してしまう。
# ルート設定: config/routes.rb
ActionController::Routing::Routes.draw do |map|
  map.resources :slips do |slip|
    slip.resources :journals, :name_prefix=>""
  end
end

# rake routesの結果
              journals GET    /slips/:slip_id/journals                  {:controller=>"journals", :action=>"index"}
    formatted_journals GET    /slips/:slip_id/journals.:format          {:controller=>"journals", :action=>"index"}
                       POST   /slips/:slip_id/journals                  {:controller=>"journals", :action=>"create"}
                       POST   /slips/:slip_id/journals.:format          {:controller=>"journals", :action=>"create"}
           new_journal GET    /slips/:slip_id/journals/new              {:controller=>"journals", :action=>"new"}
 formatted_new_journal GET    /slips/:slip_id/journals/new.:format      {:controller=>"journals", :action=>"new"}
          edit_journal GET    /slips/:slip_id/journals/:id/edit         {:controller=>"journals", :action=>"edit"}
formatted_edit_journal GET    /slips/:slip_id/journals/:id/edit.:format {:controller=>"journals", :action=>"edit"}
               journal GET    /slips/:slip_id/journals/:id              {:controller=>"journals", :action=>"show"}
     formatted_journal GET    /slips/:slip_id/journals/:id.:format      {:controller=>"journals", :action=>"show"}
                       PUT    /slips/:slip_id/journals/:id              {:controller=>"journals", :action=>"update"}
                       PUT    /slips/:slip_id/journals/:id.:format      {:controller=>"journals", :action=>"update"}
                       DELETE /slips/:slip_id/journals/:id              {:controller=>"journals", :action=>"destroy"}
                       DELETE /slips/:slip_id/journals/:id.:format      {:controller=>"journals", :action=>"destroy"}
  • すると..."slip_"が無い名前付きルートで以下のように指定できる。(@slipはidが1のSlipインスタンス、@journalはidが9のJournaインスタンスの場合)
    • <%= journals_path(@slip) %> -----------------> "/slips/1/journals"
    • <%= edit_journal_path(@slip, @journal) %> ---> "/slips/1/journals/9/edit"

:singular

  • 通常はmap.resources :slipsのように複数形で指定すると...自動変換された単数形の名前付きルートが利用できるようになる。(このページの一番最初の基本ルート設定で確認できる。例:slip_url(@slip)、new_slip_url(@slip)、edit_slip_url(@slip)。)
  • :singularを指定すると、単数形の名前付きルートは:singularで指定した文字列に変換される。(下記の例は不自然過ぎるが...おそらく、単数形・複数形が不規則に変化する単語で、自動変換が対応しない時に活躍しそう。)
# ルート設定: config/routes.rb
ActionController::Routing::Routes.draw do |map|
  map.resources :slips, :singular=>:test
end

# rake routesの結果
              slips GET    /slips                           {:controller=>"slips", :action=>"index"}
    formatted_slips GET    /slips.:format                   {:controller=>"slips", :action=>"index"}
                    POST   /slips                           {:controller=>"slips", :action=>"create"}
                    POST   /slips.:format                   {:controller=>"slips", :action=>"create"}
           new_test GET    /slips/new                       {:controller=>"slips", :action=>"new"}
 formatted_new_test GET    /slips/new.:format               {:controller=>"slips", :action=>"new"}
          edit_test GET    /slips/:id/edit                  {:controller=>"slips", :action=>"edit"}
formatted_edit_test GET    /slips/:id/edit.:format          {:controller=>"slips", :action=>"edit"}
               test GET    /slips/:id                       {:controller=>"slips", :action=>"show"}
     formatted_test GET    /slips/:id.:format               {:controller=>"slips", :action=>"show"}
                    PUT    /slips/:id                       {:controller=>"slips", :action=>"update"}
                    PUT    /slips/:id.:format               {:controller=>"slips", :action=>"update"}
                    DELETE /slips/:id                       {:controller=>"slips", :action=>"destroy"}
                    DELETE /slips/:id.:format               {:controller=>"slips", :action=>"destroy"}

:conditions

  • ルート規則が適用される時のHTTPメソッドを制限すると思うのだが、使い方不明...。よく分からなかった。
  • map.resources :slips, :member=>{:test1=>:put, :test2=>:get}で指定可能なのに、:conditionsはどんな場合に利用するのだろう?
# ルート設定: config/routes.rb
ActionController::Routing::Routes.draw do |map|
  map.resources :slips, :conditions=>{:method=>:post}
end

*1:2.0以前であってもルート設定をちゃんと理解できていれば、もっともっと幸せになれたはず...。