遍历数组以创建rails对象
我无法找到有关如何遍历数组和创建对象的任何信息。
我的表单创建了一个可选择的用户列表,在选中时,将user_ids作为数组对象传递。
邀请\ new.html.rb
@event_selected.id %> -
我想通过将attend_event_id与attendee_id数组中的所有对象相结合来创建新的Invitations对象。
经过一些麻烦后,我得到了控制器工作的基础知识,但只是将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
你的意思是这样的吗?
<%= bootstrap_form_for Invitation.new do |f| %>
<%= f.hidden_field :attended_event_id, :value => @event_selected.id %> <% users.each do |user| %> - <%= check_box_tag 'invitation[attendee_id][]', user.id %> <%= h user.name %>
<% end %>
<%= 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
RailsGuides有一个很好的基本示例
http://guides.rubyonrails.org/form_helpers.html#binding-a-form-to-an-object
你想要达到这样的目标:
def create params[:attendee_id].each do |user_id| Invitation.create(:attended_event_id => params[:attended_event_id], :attendee_id => user_id) end . . . end