2013-03-20 110 views
0

我有模型User,Event, Rsvp。我希望Rsvp表單出現在我的Event模型的show頁面中。用戶可以創建許多事件,但我不需要知道哪個用戶創建了哪個事件(至少我不這麼認爲)。用戶也可以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頁的Event的我想它可以讓Users RSVP到Event側邊欄的形式。我有這樣的事情,但這不太對。我特別不知道的是,進入的form_for的第一個參數:

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

在我的事件/ I 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 

回答

0

,因爲你要創建爲當前用戶的預約,您只應在事件傳遞給RSVP創建行動。對於表單,請使用

<%= 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 
+0

幾乎就在@jvnill。夫婦快速提問。看到我上面的EDIT2。那是否是「正確的」Rails方式重定向回到相同的事件?另外,如果表單沒有被正確填寫,我會在else和end之間插入什麼,我想重新呈現Event的展示模板,並顯示一個錯誤。 – mikeglaz 2013-03-20 17:49:05

+0

沒關係,想通了:渲染'events/show'。謝謝您的幫助! – mikeglaz 2013-03-20 18:26:52

相關問題