在一个页面上,我可能只有一个视频,然后复选框可以添加多个狗。很容易(如下)......
查看:
<%= check_box_tag "video[dog_ids][]", dog.id %>
控制器:
params[:video][:dog_ids] ||= []
但我无法弄清楚该怎么做的是多个视频,每个视频都有多只狗。
我目前有这个:
<% @videos.each do |video| %>
<%= fields_for "item[]", video do |f| %>
<%= f.hidden_field :id, :index => nil %>
<%= f.text_field :title, :index => nil%>
<%= f.text_area :body, :index => nil %>
<% video.dogs.each do |dog| %>
<%= check_box_tag "item[][video[dog_ids][]]", dog.id %>
<% end %>
<% end %>
<% end %>
但是当我这样做时,dogs_ids
在提交时总是nil
。
知道我做错了吗?
答案 0 :(得分:2)
使用fields_for "item[]"
和f.text_field :title, :index => nil
进行此类设置会产生:
<input id="item__name" name="item[][title]" size="30" type="text" value="vid1">
这表示复选框名称应为item[][dog_ids][]
。
一个工作的例子:
<% @videos.each do |video| %>
<%= fields_for "item[]", video do |f| %>
<%= f.text_field :title, :index => nil %>
<% video.dogs.each do |dog| %>
<%= check_box_tag "item[][dog_ids][]", dog.id %> <%= Dog.name %>
<% end %>
<br>
<% end %>
<% end %>
这会产生params的结果:
{"item"=> [
{"title"=>"vid1", "dog_ids"=>["1", "2"]},
{"title"=>"vid2", "dog_ids"=>["2"]},
{"title"=>"vid3", "dog_ids"=>["2", "3"]}
]}