2013-11-26 3 views
0

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

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

ответ

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 

Это создаст массив хэшей, которые затем будут использоваться для основной массы создают все GroupMembers в одной вставке базы данных, а не 1 вставки базы данных на friend_id.

+0

Спасибо, что отлично работает –

+0

Добро пожаловать :) – DiegoSalazar

Смежные вопросы