Arrayに対してfields_forを適用する
Railsを使い始めて3日目、詰まった・・・
問題
eventとparticipantのように1対nの関係を持ったモデルを作成して、それらを同時に一つのフォームで入力したい場合にfields_forを使うと思うのだが、
participantがparticipantsのような場合にfields_forを使って配列をPostする方法がわからなかった。
とりあえずぐぐってみたが、いい結果を見つけることができなかった・・・
まぁ検索方法が悪いのかもしれないけど
探すなら一番確かなのは本家のマニュアルを見ることだと心得ているので、以下のAPIマニュアルを見ることにした。
http://api.rubyonrails.org/
うーんわからん。でも手がかりはあった。
解決方法1
<% for i in 0..@participants.size -1 do %> <%= fields_for @participants[i] do |p| %> <div class="field"> <p>participant's name</p> <%= p.text_field :name %> </div> <% end %> <% end %>
泥臭い感じがするが、とりあえず以下のような出力を得ることができる
<div class="field"> <p>participant's name</p> <input id="participants_0_name" name="participants[0][name]" size="30" type="text" /> </div> <div class="field"> <p>participant's name</p> <input id="participants_1_name" name="participants[1][name]" size="30" type="text" /> </div> ...
配列でparticipantが出力されている
解決方法2
解決方法1よりも少しだけ綺麗にする<% for i in 0..@participants.size-1 do %> <%= fields_for :participants, @participants[i], { :index => i } do |p| %> <div class="field"> <p>participant's name</p> <%= p.text_field :name %> </div> <% end %> <% end %>