ネストしたresourceでform_forに与える引数
config/routes.rbが
resources :hoges do resources :fugas end
のようにネストしたresourceのとき、子となるfugaのみ作成/更新を行うフォームを書こうとして、少しハマったのでメモ。
次のヘルパーメソッドでは、
new_hoge_fuga_path(@fuga.hoge, @fuga) edit_hoge_fuga_path(@fuga.hoge, @fuga)
以下のURLが呼ばれる。
http://localhost/hoges/:hoge_id/fugas/new
http://localhost/hoges/:hoge_id/fugas/:id/edit
このときに使用されるフォームは、
app/views/fugas/_form.html.erb
で、ここに書くform_forヘルパーの引数は、
<%= form_for([ @fuga.hoge, @fuga ]) do |f| %> <%# 親のIDがほしい場合はhidden_field_tagで仕込んでおく %> <%= hidden_field_tag "hoge_id", @fuga.hoge_id %> ...
とすればよいらしい。親と子を配列にする。これよりよい方法があれば知りたいところ。親と子を同時に作成/更新するフォームについてはfields_forでググるといろいろ見つかると思う。
2012/4/4追記
上ソースコード内で「親のIDがほしい場合はhidden_field_tagで仕込んでおく」と書いているが、上記のようにしていた場合、formタグのaction属性に"/hoges/1/fugas/1"といったURLが設定されるので、hidden_field_tagで仕込まずとも親のIDが取得可能です。id:yamitzkyさん、ご指摘ありがとうございました。