Как создать отдельную запись для каждого элемента в массиве

У меня есть приложение, в котором пользователь может иметь несколько друзей и создавать группы друзей. после того, как пользователь создал группу и находится на странице показа для этой группы, появляется форма, в которой отображается список друзей с флажком рядом с каждым из них. Пользователь может выбрать друзей, которые будут добавлены в группу, и при отправке будет создан элемент 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

Можно ли это сделать так, как я пытаюсь, и если да, то это даже хороший способ сделать это?

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 в одной вставке базы данных, а не 1 вставка базы данных на friend_id.

Другие вопросы по тегам