2011-01-05 36 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

で私のホームページにお問い合わせフォームを埋め込みたいことを決めたので、私がそれに、部分的にリンクをフォームに立ち往生私のホームページの一番下に、インスタンス変数をマイページコントローラのインデックスアクションに追加します。私がフォームに正しく記入すると、電子メールが送信され、すべてが素晴らしいです。

フォーム提出が失敗した場合、実際にはpages_controllerの:indexアクションが好きなときは、contacts_controllerの新しいアクションがレンダリングされます。私は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