2015-10-14 137 views
0

我无法找到有关如何遍历数组和创建对象的任何信息。遍历数组创建rails对象

我的表单创建一个可选择的用户列表,当选中时,将user_ids作为数组对象传递。

邀请\ new.html.rb

<%= bootstrap_form_for Invitation.new do |f| %> 
<br> 
    <ul> 
    <%= f.hidden_field :attended_event_id, :value => @event_selected.id %> 
    <li> 
    <%= check_box_tag 'attendee_id[]', user.id %> 
    <%= h user.name %> 
    </li> 
    <% end %> 
    </ul> 
<br> 
<%= f.submit "Invite Selected Users" %> 
<% end %> 

我想再由attended_event_id与所有attendee_id数组中的对象的结合创造新的邀请对象。

经过一些麻烦,我得到了我的控制器工作的基础知识,但只通过传递user_id作为文本条目。以下是我的邀请控制器。由于我一直无法找到一个好例子,所以不知道从哪里开始。

invitations_controller.rb

def create 
    @invitation = Invitation.new(invite_params) 

    if @invitation.save! 
     flash.now[:success] = "Invited!" 
     redirect_to root_path 
    else 
     flash.now[:error] = "Failure!" 
     redirect_to root_path 
    end 
    end 

    private 
    def invite_params 

    params.require(:invitation).permit(:attended_event_id, :attendee_id) 
    end 
end 

回答

0

待办事项你意思是像这样?

<%= bootstrap_form_for Invitation.new do |f| %> 
    <br> 
    <ul> 
     <%= f.hidden_field :attended_event_id, :value => @event_selected.id %> 
     <% users.each do |user| %> 
     <li> 
      <%= check_box_tag 'invitation[attendee_id][]', user.id %> 
      <%= h user.name %> 
     </li> 
     <% end %> 
    </ul> 
    <br> 
    <%= f.submit "Invite Selected Users" %> 
<% end %> 


def create 
@invitations = invite_params[:attendee_id].map do |attendee_id| 
    Invitation.new(
    attended_event_id: invite_params[:attended_event_id], 
    attendee_id: attendee_id 
) 
end 

if @invitations.any?(&:invalid?) 
    flash.now[:error] = "Failure!" 
    redirect_to root_path 
else 
    @invitations.each(&:save!) 
    flash.now[:success] = "Invited!" 
    redirect_to root_path 
end 
end 

private 
def invite_params 
    params.require(:invitation).permit(:attended_event_id, {:attendee_id => []}) 
end 
+0

Thanks !!我正在经历这个,但仍然遇到:“NoMethodError(未定义的方法'映射为零:NilClass):”错误。我做了所有其他verbatum(除了将attendie_id更改为attendee_id,我猜这只是一个错字。 – Prkl8r

+0

感谢让我开始!我不得不做一些更改,但基本上做到了这一点。 ) – Prkl8r

0

要实现这样的事情干好基本的例子:

def create 
    params[:attendee_id].each do |user_id| 
    Invitation.create(:attended_event_id => params[:attended_event_id], :attendee_id => user_id) 
    end 
    . 
    . 
    . 
end