ぺんちゃん日記にて、ヒントをいただいたけど、それじゃー新規のときはidがまだないからどうしたらいいの?って感じで。
ゴリゴリidにダミー値を入れてみたりしたけど、なんか気持ち悪くて、ActionView::helper.rbを調べてみた。ありました!
ヒントページ
ぺんちゃん日記
■例えば、家族情報を明細として持つとしたら
続柄 | 名前 | 年齢 |
(うぅ、テーブルがうまくレイアウトできない。。)
■これをRailsで表示
表示するだけなら、なんとでもなるけど、コントローラーで params[:family] で取得できたら、つまり params[:family][0] の中に続柄・名前・年齢が入っている Hash として取得できたらすごい楽。なわけ。
■ヒントページによると更新の場合は
<%= text_field("family[]", 'zokugara') %>
としておけば、id(例えば23だとする)が使用されて、
<input id="family_23_zokugara" name="family[23][zokugara]" size="30" type="text" value="1" />
と展開してくれる。
■でも新規登録もあるわけで
前は、コントローラーでidにダミー値(例えば"a"とか)を入れて、更新時と同じような動きにしていたが。
やっぱ、おかしい。気持ち悪い。
調べてみたら、:index => 0 みたいな感じで、options(html_optionsがある場合はそっち)に指定してやると、idの代わりに(優先的に)使用してくれる。
上記の例に適応してみるとRailsでは例えばこう書ける。
<% @families.each_with_index do |@family,index| %>
<tr>
<td>
<%= select('family[]', 'zokugara', [["ママ", "0"],["息子", "1"],["ペット", "1"]].freeze, {:include_blank => true}, :index => index) %>
</td>
<td>
<%= text_field 'family[]', 'name', :size => "20", :index => index %>
</td>
<td>
<%= text_field 'family[]', 'age', :size => "20", :index => index %>
</td>
</tr>
<% end %>
※@familiesはコントローラーで、ARモデルインスタンスを3つnewしたHashと思ってください。
これで思い通りに展開されて、コントローラーで楽にパラメータを取得できるようになる!
■まとめ
こんなことで悩んでいるのはわしだけか?
調べても、出てこなかったしな。
いまさら、RailsDocumentに載ってるわ。これ。