2011-01-05 229 views
0

我在我的網站上有一個聯繫表單。它工作正常,下面的代碼:將錯誤消息從一個控制器傳遞到另一個控制器

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

嵌入的聯繫方式在我的主頁所以我堅持的形式部分,鏈接到它的我的主頁底部,並添加一個實例變量到我的頁面控制器中的索引操作。如果我填寫正確的表格,電子郵件會發送,一切都很好。

但是,如果表單提交失敗,那麼我會更喜歡contacts_controller中的new操作:我更喜歡pages_controller的index操作。我知道我可以使用redirect_to "/"重定向到此操作,但當我這樣做時,我沒有在窗體上看到error_messages。

如何將控件從contacts_controller轉移到pages_controller並在失敗的表單提交中包含錯誤消息?

回答

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

感謝很多:)這工作得很好, – stephenmurdoch 2011-01-06 07:04:58

相關問題