2013-11-26 54 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

相关问题