我有一個聯繫表單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?
這是不夠的呈現適當的模板,你還需要初始化適當的實例變量,等等......也許遠程提交表單(AJAX)會更好? – dimuch
謝謝,我已經確認實例變量已初始化,我完全同意我應該使用AJAX來做到這一點。您應該將其作爲答案提交,我會接受它,因爲我認爲它可能會成爲最佳選擇。 – stephenmurdoch
controller_name和action_name變量應該已經在控制器代碼中設置 - 但這些指向控制器執行;你可以使用referrer('request.referer'),但有時這是零,所以在這種情況下有一個後備 – house9