2008-02-03 1アクションで複数のモデルを同時に保存するには?
■[Ruby on Rails]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以前であってもルート設定をちゃんと理解できていれば、もっともっと幸せになれたはず...。
トラックバック - http://d.hatena.ne.jp/zariganitosh/20080203/1202091772
リンク元
- 52 http://reader.livedoor.com/reader/
- 26 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=HZt&q=sortable_element+rails&btnG=検索&lr=lang_ja
- 20 http://www.google.co.jp/search?q=map.resources&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 14 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GFRC_jaJP210JP210&q=F.submit()
- 14 http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=has_many+RAILS2&num=50
- 11 http://b.hatena.ne.jp/add?mode=confirm&title=2.0%u306Emap.resources%u306E%u30AA%u30D7%u30B7%u30E7%u30F3%u8A2D%u5B9A%u3044%u308D%u3044%u308D - %u30B6%u30EA%u30AC%u30CB%u304C%u898B%u3066%u3044%u305F...%u3002&url=http://d.hatena.ne.jp/zariganitosh/2008
- 11 http://www.google.co.jp/search?hl=ja&client=firefox&rls=org.mozilla:ja:official&hs=DtE&q=form_for+form_tag&btnG=検索&lr=lang_ja
- 8 http://b.hatena.ne.jp/entry/7354676
- 7 http://fastladder.com/reader/
- 6 http://209.85.175.104/search?q=cache:fkkNxLt0rLYJ:d.hatena.ne.jp/zariganitosh/20070831/1188547272+sortable_element&hl=ja&ct=clnk&cd=3