2009-07-22 8 views
17

redirect_toの後に私のフラッシュメッセージが消える理由を理解できません。私のビューでデバッガを起動し、フラッシュ変数は完全に空です。Rails、redirect_toの後にフラッシュをオフ

flash 
=> {} 

結果はflash.nowと同じです...何かを編集してレンダーするとうまく動作します。

コントローラー:

def create 
    @user_session = UserSession.new(params[:user_session]) 
    if @user_session.save 
     flash[:notice] = "Logged in" 
     redirect_to root_url 
    else 
     render :action => 'new' 
    end 
    end 

アプリケーションレイアウト:

- flash.each do |name, msg| 
    =content_tag :div, msg, :class => "flash_#{name}" 

root_urlが別のコントローラとアクションです。

+0

Rails 2.3.2を使用していますか? –

+0

あなたはリダイレクト先のroot_urlコントローラ/アクションのコードを投稿できますか? –

答えて

4

これは、render_componentプラグインでした...それは、レール2.3.2を壊します。とにかくありがとう。

+1

私は、この問題をrender_componentコードの2行、つまりflash.discardとflash.sweepという行でコメントアウトして解決しました。私はこれが正しい解決策であるかどうかはわかりませんが、それは私が現時点で前進することを可能にしています。 – Mario

+0

こんにちは、私もここで同じ問題を抱えており、半日の間立ち往生しています。私はこのように 'redirect_to new_user_session_url(サブドメイン:@ account.subdomain)、通知:I18n.t( 'accounts.create。success_confirmation ') 'と、私はセッション/新しいページで私のメッセージを失っています。しかし、コントローラでデバッグすると、通知キーと値でフラッシュオブジェクトが表示されています。あなたはあなたがしたことをrender_componentでもっと詳しく説明できますか? –

1

あなたは別のアクションの使用フラッシュ にリダイレクトし、あなたがしている場合、同じアクションの使用にレンダリングされている場合flash.now

24

あなたはメッセージが備わっていますフラッシュを使用すると、表示するメッセージの2つの方法があります。

は、即座に同じページのロードに、そしてflash['foo']からビューでアクセス:

flash.now['foo'] = "Hello world" 

それとも別のページへのリダイレクト、およびflash['notice']からアクセス可能に:

redirect_to root_url, notice: "Hello world" 

のRuby on Railsは、ウェブサイトを案内本当に良いの参照です:

http://guides.rubyonrails.org/action_controller_overview.html#the-flash

1

私のフラッシュレンダリングがあるため、私のルーティングのroot_urlのために働いていませんでした。私は、root = to redirect( '[SOME_OTHER_PAGE]')のように、root_urlを別のページにリダイレクトさせました。これの代わりに、別のリソースにredirect_toを使用するだけです。

7

二重リダイレクト(たとえば、ユーザーにリダイレクトされるルートへのリダイレクト)を使用している場合は、フラッシュを渡す必要があります。

def first_action 
    flash[:notice] = "Logged in" 
    redirect_to root_url 
end 

def second_redirect_action 
    redirect_to current_user, flash: flash 
end 
4

私はRailsの4で、あまりにもこの問題に走った、としばらくの間、私のコンピュータに対して私の頭を叩いた後、私はRailsのログにこれに気づいた:Can't verify CSRF token authenticity

私は、CSRFトークンを持たないフォームを使って提出していました。驚いたことに、それはまだ私のコントローラーメソッドを呼び出すと、まだリダイレクトを行っていたが、これはすべてを投げていたものだった。

フォームにCSRFトークンを追加すると修正されました。

関連する問題