我有模型User
,Event
,Rsvp
。我想在Rsvp
模型的show
页面中显示Event
表单。用户可以创建许多事件,但我不需要知道哪个用户创建了哪个事件(至少我不认为)。用户还可以rsvp到事件。我的模型看起来像这样:
user.rb
has_many :rsvps
event.rb
has_many :rsvps
rsvp.rb
belongs_to :user
belongs_to :event
我认为我的RsvpsController看起来应该是这样的:
class RsvpsController < ApplicationController
def new
@user = current_user
@event = Event.find(params[:id])
@rsvp = Rsvp.new
end
end
现在在show
的{{1}}页面中,我想在侧边栏中添加一个表单,让Event
rsvp到Users
。我有类似的东西,但它不太正确。我特别不确定form_for中的第一个参数是什么:
Event
在我的events / show.html.haml中我尝试像这样渲染Rsvp新动作:
form_for [@user, @event, @rsvp], url: {controller: 'rsvps_controller', action: 'create' } do |f|
但是这会渲染一个事件/新的部分
修改
我想我知道为什么这个渲染会渲染一个Event new partial。在Rsvps / new.html.haml里面我有=render template: 'rsvps/new'
。我的Events文件夹中也有一个_form.html.haml。
EDIT2
rsvps_controller.rb
render 'form'
答案 0 :(得分:0)
由于您要为当前用户创建预留,因此您应该只将事件传递给rsvp create操作。对于表单,请使用
<%= form_for Rsvp.new do |f| %>
<%= f.hidden_field :event_id, value: @event.id %>
这可以让您访问当前用户想要rsvp的事件。因此,在Rsvp控制器的创建操作中,您可以使用以下代码构建预留
def create
@rsvp = current_user.rsvps.build params[:rsvp]
if @rsvp.save
...
end