0

私はモデル、、を持ってUserEventますRsvp。モデルのページにRsvpフォームを表示したいと考えています。ユーザーは多くのイベントを作成できますが、どのユーザーがどのイベントを作成したかを知る必要はありません (少なくとも私は思いません)。ユーザーは、イベントに応答することもできます。私のモデルは次のようになります。showEvent

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ページで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'

しかし、これは代わりにイベント/新しいパーシャルをレンダリングします

編集 私は、このレンダーがイベントの新しい部分をレンダリングしている理由を知っていると思います。Rsvps/new.html.haml の中にrender 'form'. Events フォルダーには _form.html.haml もあります。

EDIT2

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 に答える