0

我有模型User,,,EventRsvp我想让一个Rsvp表格出现在show我的Event模型页面中。一个用户可以创建许多事件,但我不需要知道哪个用户创建了哪个事件(至少我不认为)。用户也可以回复事件。我的模型看起来像这样:

用户.rb

has_many :rsvps

事件.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页面中,Event我想在侧边栏中有一个表单,让Usersrsvp 到Event. 我有这样的东西,但它不太正确。我特别不确定 form_for 的第一个参数是什么:

form_for [@user, @event, @rsvp], url: {controller: 'rsvps_controller', action: 'create' } do |f|

在我的 events/show.html.haml 中,我尝试像这样呈现 Rsvp 新动作:

=render template: 'rsvps/new'

但这反而呈现了一个事件/新的部分

编辑 我想我知道为什么这个渲染会渲染一个 Event new 部分。在 Rsvps/new.html.haml 我有render 'form'. 我的 Events 文件夹中也有一个 _form.html.haml。

编辑2

rsvps_controller.rb

def create
  @rsvp = current_user.rsvps.build(params[:rsvp])
  if @rsvp.save
    flash[:success] = "You have RSVPed."
    redirect_to Event.find(params[:event_id])
  else

  end
end
4

1 回答 1

0

由于您想为当前用户创建预订,您应该只将事件传递给 rsvp create 操作。对于表格,使用

<%= form_for Rsvp.new do |f| %>
  <%= f.hidden_field :event_id, value: @event.id %>

这应该使您可以访问当前用户想要回复的事件。因此,在 Rsvp 控制器的创建操作中,您可以使用以下代码构建预订

def create
  @rsvp = current_user.rsvps.build params[:rsvp]

  if @rsvp.save
    ...
end
于 2013-03-20T14:38:15.423 回答