Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何为数组中的每个项创建单独的记录_Ruby On Rails_Arrays_Forms_Loops_Controller - Fatal编程技术网

Ruby on rails 如何为数组中的每个项创建单独的记录

Ruby on rails 如何为数组中的每个项创建单独的记录,ruby-on-rails,arrays,forms,loops,controller,Ruby On Rails,Arrays,Forms,Loops,Controller,我有一个应用程序,一个用户可以有几个朋友,可以创建朋友组。用户首次创建组并在该组的显示页面上后,会出现一个表单,其中显示朋友列表,每个朋友旁边都有一个复选框。用户可以选择将添加到组中的朋友,并且在提交时,将创建一个组成员项目,以将每个选定的朋友加入到当前组中 <%= form_for @group_member, :url => {:controller => "groups", :action => 'add_member'} do |f| %> <%

我有一个应用程序,一个用户可以有几个朋友,可以创建朋友组。用户首次创建组并在该组的显示页面上后,会出现一个表单,其中显示朋友列表,每个朋友旁边都有一个复选框。用户可以选择将添加到组中的朋友,并且在提交时,将创建一个组成员项目,以将每个选定的朋友加入到当前组中

<%= 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 %>
但是我很难想出如何写这个动作。我需要遍历“friend_ID”数组中的项目,并为每个项目创建一个新的GroupMember项目。这样做的效果(希望这能让你了解我在做什么):

这可以用我正在尝试的方式来完成吗?如果可以,这是一种很好的方式吗?

将代码更改为:

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
def添加成员
组成员属性=[]
参数[:friend_id]。每个do|id|
组成员(属性id})
结束
GroupMember.create group_members_属性
结束
这将构建一个哈希数组,然后使用该数组在单个数据库插入中批量创建所有GroupMember,而不是每个friend_id插入一个数据库

def add_member
  friend_ids.each do i
    @member = GroupMember.create(:group_id => params[:group_id], :friend_id => i.value)
  end
end
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