2011-05-05 51 views
0

在單個頁面上,我可能會有一個視頻,然後在複選框中添加多個狗。很容易(如下)...Rails:has_many:通過_ids嵌套?

查看:

<%= 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

任何想法我做錯了什麼?

回答

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"]} 
]} 
+0

的'fields_for'具有留(由於在表格中的字段的其餘部分)。 – Shpigford 2011-05-05 18:20:03

+0

但在你的例子中,你實際上並不像'<= = check_box_tag ...'那樣使用'fields_for',而不是'<%= f.check_box ...'。 – Laas 2011-05-05 18:42:10

+0

我的觀點是,你必須在複選框名稱中指定視頻ID並使用當前的代碼示例,'item []'部分是不必要的。儘管如此,我更新了我的代碼以反映您的示例。 – Laas 2011-05-05 18:50:53