【问题标题】:how to create a separate record for each item in an array如何为数组中的每个项目创建单独的记录
【发布时间】:2013-11-26 16:53:26
【问题描述】:

我有一个应用程序,用户可以在其中拥有多个朋友并可以创建朋友组。在用户第一次创建组并在该组的显示页面上后,有一个表单显示朋友列表,每个人旁边都有一个复选框。用户可以选择将添加到群组中的朋友,并在提交时创建一个 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 %>

这似乎是将每个 group_member 所需的所有参数提交给控制器

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

这可以按照我正在尝试的方式完成吗?如果可以的话,这是否是一种好方法?

【问题讨论】:

    标签: ruby-on-rails arrays forms loops controller


    【解决方案1】:

    将您的代码更改为:

    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
    

    这将构建一个哈希数组,然后用于在单个数据库插入中批量创建所有 GroupMembers,而不是每个friend_id 1 个数据库插入。

    【讨论】:

      猜你喜欢
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      相关资源
      最近更新 更多