表形式のフォームの書き方?
Strutsでも面倒くさかった、Excelシート的なHTMLテーブル的な二次元データ構造用のフォームはどう書くか、
相変わらず何がベストなのかはよくわからないが、Rails 2.1.0 だととりあえず以下のようにするとそれなりにできることはできるらしい。
たとえばアドレス帳みたいのを作っていて、連絡先モデル Contact に name と phone があったとする。
で、たくさんクリックするのが面倒なので1画面でたくさんの連絡先をまとめて編集したいとする。
編集対象の Contact の配列をコントローラーで @contacts に取得しておいたとすると、
<table> <% @contacts.each_with_index do |contact, index| %> <% fields_for "contact[]", contact, :index => index do |cf| %> <tr> <td><%= index %><%= cf.hidden_field :id %></td> <td><%= cf.text_field :name %></td> <td><%= cf.text_field :phone %></td> </tr> <% end %> <% end %> </table>
のようにフォームに書けば、コントローラーに渡ってくる params[:contact] は
{"0" => {:id => ..., :name => ..., :phone => ...}, "1" => {:id => ..., :name => ..., :phone => ...}, ...}
みたいになってるので、あとはindexやidを見て更新なりすればいい。追加の場合も id が無いだけで似たようなもの。
”0" とか "1" が、フォームで指定した :index の値。:index をつけないとこのキーは contact の id になる。順序がどうでもいい場合はそっちでもいいかも。