我的网站上有联系表格。它工作正常,这是代码:
class ContactsController < ApplicationController
def new
@contact = Contact.new(:id => 1)
end
def create
@contact = Contact.new(params[:contact])
if @contact.save
redirect_to('/', :notice => "Message sent ....")
else
flash.now[:error] = "Oops, something went wrong. Please try again"
render 'new'
end
end
end
#contact
= simple_form_for @contact, :url=>{:controller=>:contacts, :action=>:create}, :html=>{:method=>:post} do |f|
= render 'shared/error_messages', :target => @contact
= f.input :name
= f.input :email
= f.input :subject
= f.input :body, :as => :text, :input_html => { :rows => 5 }
= f.submit "Send"
我已决定要将联系表单嵌入我的主页pages/index.html.haml
所以我将表单粘贴在我的主页底部的部分链接中,并将一个实例变量添加到我的页面控制器中的索引操作中。如果我正确填写表格,电子邮件将被发送,一切都很棒。
但是如果表单提交失败,那么当我真的更喜欢pages_controller的:index动作时,来自contacts_controller的:new动作会被渲染。我知道我可以使用redirect_to "/"
重定向到此操作,但是当我这样做时,我没有在表单上获得error_messages。
如何将控制权从contacts_controller转移到pages_controller并在失败的表单提交中包含错误消息?
答案 0 :(得分:1)
如果无法在创建操作中创建正确的页面,但是如果要重定向,则不知道如何分支代码,那么你不想要flash.now。
基本上
if @contact.save
redirect_to('/', :notice => "Message sent ....")
else
if (should new page be shown check)
flash.now[:error] = "Oops, something went wrong. Please try again"
render 'new'
else
flash[:error] = "Oops ... "
redirect_to somelocation_path
end
end