2013-11-26 95 views
0

我有一個應用程序,用戶可以有幾個朋友並可以創建羣組。在用戶創建了一個組並且正在該組的顯示頁面上之後,會有一個窗體顯示每個組旁邊的複選框的朋友列表。用戶可以選擇將添加到該組的朋友,並在提交時創建一個group_member項目,以將每個選定的朋友加入當前組。如何爲數組中的每個項目創建單獨的記錄

<%= form_for @group_member, :url => {:controller => "groups", :action => 'add_member'} do |f| %> 
    <% @friends.each do |friend| %> 
    <tr> 
     <td><%= check_box_tag "friend_ids[]", friend.id %></td> 
     <td><%= friend.name + friend.id.to_s %></td> 
    </tr> 
    <% end %> 
    <div class="actions"> 
    <%= f.hidden_field :group_id, :value => params[:id] %> 
    <%= f.submit %> 
    </div> 
<% end %> 

這似乎是所有提交各自所需組 - 成員控制器

Parameters: {"utf8"=>"✓", "authenticity_token"=>"zg...Bg=", "friend_ids"=>["2", "3"], "group_member"=>{"group_id"=>"4"}, "commit"=>"Create Group member"} 

的參數,但我無法工作了我怎麼會寫這個動作。我需要遍歷「friend_ids」數組中的項目,併爲它們中的每個項目創建一個新的GroupMember項目。東西這樣做的效果(希望這會給你什麼,我試圖做一個想法):

def add_member 
    friend_ids.each do i 
    @member = GroupMember.create(:group_id => params[:group_id], :friend_id => i.value) 
    end 
end 

可以在此我想要的方式來完成,如果是這樣,即使是好的這樣做的方法?

回答

2

你的代碼更改爲:

def add_member 
    group_members_attributes = [] 
    params[:friend_ids].each do |id| 
    group_members_attributes <<({ :group_id => params[:group_member][:group_id], :friend_id => id }) 
    end 
    GroupMember.create group_members_attributes 
end 

這將構建隨後將被用於批量創建在一個單一的數據庫插入,而不是每friend_id 1個數據庫插入所有GroupMembers哈希值的數組。

+0

謝謝 - 這很好用 –

+0

不客氣:) – DiegoSalazar

相關問題