我在让表单上班时遇到一些问题。通过Odin的东西,我试图让用户邀请其他用户参加他们的活动。我想通过在后台传递attend_event_id然后通过复选框传递所选用户的user_id数组来完成此操作。我有以下几点,但不断得到param缺少错误。我做了一些改变,想尝试从我强大的params倒退到我的形式。
events / show.html.erb
<% @user.owned_events.each do |e| %>
<ul>
<li><%= e.name %> | <%= link_to "Invite Guests", invitations_new_path(:event_select => e.id) %></li>
那应该传递被选为event_select的当前事件。
然后我使用该事件id以及所有用户ID(减去current_user)来创建可能的被邀请者列表。
invitations_controller.rb:
class InvitationsController < ApplicationController
helper_method :current_user
def new
@event_selected = Event.find(params[:event_select])
@users = User.where("id != ?", current_user.id )
end
def create
@invitation = Invitation.new(invite_params)
end
private
def invite_params
#OLD PARAMS STATEMENT: params.require(:attended_event_id => params[:event_selected], :attendee_id => params[:user_ids].first )
#NEW PARAMS STATEMENT
params.require(:invitation).permit(:attended_event_id, :attendee_id)
end
end
我的视图显示用户列表,选中复选框后,应该传递event_selected和user_ids。
invitations / new.html.erb&lt; ---这是我无法弄清楚如何更改的地方
<h3>Invite users to <%= @event_selected.name %></h3>
<%= bootstrap_form_for Invitation.new do |f| %>
<br>
<ul>
<% @users.each do |user| %>
<li>
<%= hidden_field_tag :event_selected, @event_selected.id %>
<%= check_box_tag 'user_ids[]', user.id %>
<%= h user.name %>
</li>
<% end %>
</ul>
<br>
<%= submit_tag "Invite Selected Users" %>
<% end %>
我试图让这个工作一次只选择一个用户,然后再从所选事件中创建多个对象,并结合user_id数组中的所有结果。当我选择单个用户时,我不断收到丢失的参数错误,但是看着哈希,似乎一切都在那里。
param is missing or the value is empty: {:attended_event_id=>"14", :attendee_id=>"3"}
Parameters:
{"utf8"=>"✓",
"authenticity_token"=>"GMMg9DwnTRAw4qP/ICqgACUB4d42Pl9Y7hrrNQzO38K8inbgyM00H2etrepjrT35hwIenHfwQPQW08V6QnHl1A==",
"event_selected"=>"14",
"user_ids"=>["3"],
"commit"=>"Invite Selected Users"}
这个编码的东西很新,但这是我通过大量的stackoverflow搜索无法解决的第一个问题。我似乎在这里遗漏了一些东西。
答案 0 :(得分:0)
因此,在查看链接并向后工作之后,我发现了上半部分,它给了我最多的问题。
def invite_params
#OLD PARAMS STATEMENT:
params.require(:attended_event_id => params[:event_selected], :attendee_id => params[:user_ids].first )
#NEW PARAMS STATEMENT:
params.require(:invitation).permit(:attended_event_id, :attendee_id)
然后我将隐藏的标签更改为:
<%= f.hidden_field :attended_event_id, :value => @event_selected.id %>
这允许我从events事件控制器传递attend_event_id,通过邀请#new的新邀请传递#create。
现在我只需要弄清楚如何遍历散列作为params的一部分。