当我尝试创建连接模型时,我在参数中得到空值
I get empty value in the params when I try to create join model
我正在通过与 Party 和 Guest 的关系为 has_many 创建一个加入模型邀请,但我得到空参数 [:party_id]。用户以访客身份登录,访客可以看到所有派对列表,访客可以点击个人派对并有一个link加入派对。客人单击 "Join this party" 后,它会转到“/parties/2/invites/new”,我有一张表格供客人填写。当客人提交表格时,我被卡住了。 url 更改为“/parties/2/invites”,但我仍然看到表单视图,刷新页面后,它会显示邀请索引页面。
我在 invites#create 中输入 binding.pry 并输入参数,我可以看到 party_is“”。我看到 "commit"=>"Join!"、"controller"=>"invites"、"action"=>"create"、"party_id"=>" 3"} 允许:false>.
def new
@invite = Invite.new
@party_id = params[:party_id]
end
def create
@invite = Invite.new(invite_params)
binding.pry
if @invite.save
redirect_to guest_invites_path(current_user)
else
@party = Party.find(params[:party_id])
render :new
end
end
private
def invite_params
params.require(:invite).permit(:add_on, :rsvp, :guest, :party_id)
end
<%= form_with model: @invite, url: [@party, @invite], local: true do |f| %>
<%= f.label :add_on, "Add On" %>
<%= f.select :add_on, [1, 2, 3, 4], :prompt => 'Select One' %><br>
<%= f.label :rsvp, "RSVP" %>
<%= f.select :rsvp, [['Yes', true], ['No', false]], :include_blank => true %>
<%= f.hidden_field :party_id, :value => @party_id %>
<%= f.submit "Join!" %>
<% end %>
class Invite < ApplicationRecord
belongs_to :party
belongs_to :guest
validates :add_on, :rsvp, presence: true
accepts_nested_attributes_for :guest, :party
end
[4] 撬(#)> 提高 params.inspect
运行时错误:“68nwEzR31GS2mcJGq9WhUrP0sp9zSjZENqY4/iosH8sn0zHRxz+PRXXWsQVJDG100FTc+dG4epdA/Cr1DsiRbQ==”,"invite"=>“1”,"rsvp"=>"true","party_id"=>“” } 允许:false>、"commit"=>"Join!"、"controller"=>"invites"、"action"=>"create"、"party_id" =>“3”}允许:假>
来自(撬):4:在`创建'
对您的代码进行一些更改
从您的表单中,删除这一行
<%= f.hidden_field :party_id, :value => @party_id %>
然后在你的控制器中重写你的create
方法到这个
def create
@party = Party.find(params[:party_id])
@invite = Invite.new(invite_params)
@invite.party_id = @party.id
if @invite.save
redirect_to guest_invites_path(current_user)
else
render :new
end
end
因此,由于您的 URL 已经有 party_id
,您不需要在表单中输入它。试试这个,让我知道!
我正在通过与 Party 和 Guest 的关系为 has_many 创建一个加入模型邀请,但我得到空参数 [:party_id]。用户以访客身份登录,访客可以看到所有派对列表,访客可以点击个人派对并有一个link加入派对。客人单击 "Join this party" 后,它会转到“/parties/2/invites/new”,我有一张表格供客人填写。当客人提交表格时,我被卡住了。 url 更改为“/parties/2/invites”,但我仍然看到表单视图,刷新页面后,它会显示邀请索引页面。
我在 invites#create 中输入 binding.pry 并输入参数,我可以看到 party_is“”。我看到 "commit"=>"Join!"、"controller"=>"invites"、"action"=>"create"、"party_id"=>" 3"} 允许:false>.
def new
@invite = Invite.new
@party_id = params[:party_id]
end
def create
@invite = Invite.new(invite_params)
binding.pry
if @invite.save
redirect_to guest_invites_path(current_user)
else
@party = Party.find(params[:party_id])
render :new
end
end
private
def invite_params
params.require(:invite).permit(:add_on, :rsvp, :guest, :party_id)
end
<%= form_with model: @invite, url: [@party, @invite], local: true do |f| %>
<%= f.label :add_on, "Add On" %>
<%= f.select :add_on, [1, 2, 3, 4], :prompt => 'Select One' %><br>
<%= f.label :rsvp, "RSVP" %>
<%= f.select :rsvp, [['Yes', true], ['No', false]], :include_blank => true %>
<%= f.hidden_field :party_id, :value => @party_id %>
<%= f.submit "Join!" %>
<% end %>
class Invite < ApplicationRecord
belongs_to :party
belongs_to :guest
validates :add_on, :rsvp, presence: true
accepts_nested_attributes_for :guest, :party
end
[4] 撬(#)> 提高 params.inspect 运行时错误:“68nwEzR31GS2mcJGq9WhUrP0sp9zSjZENqY4/iosH8sn0zHRxz+PRXXWsQVJDG100FTc+dG4epdA/Cr1DsiRbQ==”,"invite"=>“1”,"rsvp"=>"true","party_id"=>“” } 允许:false>、"commit"=>"Join!"、"controller"=>"invites"、"action"=>"create"、"party_id" =>“3”}允许:假> 来自(撬):4:在`创建'
对您的代码进行一些更改
从您的表单中,删除这一行
<%= f.hidden_field :party_id, :value => @party_id %>
然后在你的控制器中重写你的create
方法到这个
def create
@party = Party.find(params[:party_id])
@invite = Invite.new(invite_params)
@invite.party_id = @party.id
if @invite.save
redirect_to guest_invites_path(current_user)
else
render :new
end
end
因此,由于您的 URL 已经有 party_id
,您不需要在表单中输入它。试试这个,让我知道!