2013-01-16 48 views
0

我有一個聯繫表單mysite.com/messages/new。我喜歡在我的網站的所有頁面上顯示此表單的想法。我有一個的問題。Rails渲染提出原始請求的操作

如果我從主頁向/messages提交POST請求,並且驗證失敗,則會顯示messages/new.html.erb(連同錯誤消息)。雖然我可以忍受這一點,但我更願意呈現調用動作的模板(即home/index.html.erb)。

目前我已經在我的消息控制器以下:

def create 
    @message = Message.new(params[:message]) 
    if @message.valid? 
    MessageMailer.message_us(@message).deliver 
    flash[:success] = "xthnxbai" 
    redirect_to root_url 
    else 
    # this is where I want to change things 
    render :new 
    end 
end 

我使用以下嘗試:

else 
    render :template => "#{request.controller}/#{request.action}" 

但是這給:

NoMethodError (undefined method `controller' for #<ActionDispatch::Request:0xa113168>): 

是否有可能告訴rails來將控制器和啓動POST請求的動作呈現給我的MessagesController?

+2

這是不夠的呈現適當的模板,你還需要初始化適當的實例變量,等等......也許遠程提交表單(AJAX)會更好? – dimuch

+0

謝謝,我已經確認實例變量已初始化,我完全同意我應該使用AJAX來做到這一點。您應該將其作爲答案提交,我會接受它,因爲我認爲它可能會成爲最佳選擇。 – stephenmurdoch

+0

controller_name和action_name變量應該已經在控制器代碼中設置 - 但這些指向控制器執行;你可以使用referrer('request.referer'),但有時這是零,所以在這種情況下有一個後備 – house9

回答

2

猜測在這種情況下通過AJAX提交表單將節省您的培根。特別是考慮到在Rails中可以輕鬆完成。

+0

同意,我實際上得到AJAX工作的時間比我寫這個問題的時間少! – stephenmurdoch