2011-10-30 1 views
5

deviseは、devise.en.ymlからのフラッシュメッセージがビューに表示されない点を除いて、私のアプリケーションでは完全に機能します。私は間違って何をしていますか?デビーズフラッシュメッセージが表示されない

以下は私のサインアップページビューです。私は:alert:noticeの両方を試しましたが、動作していません。

を使用すると、フラッシュのものを取り出したことがあり、事前

<h2>Sign up</h2> 

<% if flash[:alert] %> 
    <%=flash[:alert]%> 
<%end%> 

<%= form_for(resource,:as=>resource_name,:url => registration_path(resource_name)) do |f| %> 
    <%= devise_error_messages! %> 
    <p><%= f.label :Username %></p> 
    <p><%= f.text_field :username %></p> 

    <p><%= f.label :email %></p> 
    <p><%= f.text_field :email %></p> 

    <p><%= f.label :password %></p> 
    <p><%= f.password_field :password %></p> 

    <p><%= f.label :password_confirmation %></p> 
    <p><%= f.password_field :password_confirmation %></p> 

    <p><%= f.submit "Sign up" %></p> 
<% end %> 

<%= render :partial => "devise/shared/links" %> 

答えて

6

フラッシュが何も設定されていないため、フラッシュが見えません。あなたのフラッシュの目的を誤解しているようです。

フラッシュの一般的な動作は、現在の要求でユーザーの現在のセッションの値に設定され、その後の要求ではフラッシュメッセージが表示されます。このパターンでは、フラッシュを設定したり、別のページにリダイレクトしたり、リダイレクトから読み込んだそのページにそのフラッシュを表示させたりすることができます。フラッシュは消費され、セッションから削除されます。

これ以外の例外は、flash.nowを使用して、後続のアクションではなく現在のアクションからフラッシュを利用できるようにすることです。

あなたの場合、表示するフラッシュがないため、フラッシュが表示されません。サインアップページを読み込んでもフラッシュメッセージは設定されません。フラッシュがあなたの視点で価値を持つ唯一の方法は、他のアクションがリダイレクトされてからフラッシュを設定することです。このようなもの

redirect_to new_user_registrations_path, :notice => "This flash will show up on the sign up page" 

通常、特定のビュー内ではなく、アプリケーションのレイアウト内でフラッシュを呼び出すことは望ましくありません。これにより、リダイレクトを行う任意のアクションからフラッシュを設定することができ、次のページが何であってもフラッシュが表示されます。特定のビューからフラッシュを設定するには、特定のビューがリダイレクトで使用されるビューであることが必要です。これは必ずしも当てはまるとは限りませんが、flash.nowはリダイレクションで動作しないため例外になります。特定のビューでフラッシュを使用する必要がある場合は、従来のアラート/予告フラッシュバーを使用しません。これは、アプリケーションレイアウトで検索してフラッシュを2回レンダリングするためです。 [:カスタム]と異なり、私のレイアウトでの取り扱いフラッシュよりも処理されているフラッシュで何かをする代わりに、私はその後、私のユーザー/ショービューで、私はフラッシュを探します

class UsersController < ApplicationController 
    def custom_action 
    @user = User.find params[:id] 
    do_something_with @User 
    flash[:user] = "Custom action completed!" 
    redirect_to @user 
    end 
end 

のようなものにフラッシュを設定するかもしれません。私は実際にこのようなことをする必要はありませんでしたが、もし私がする必要があれば、これは私がそれをどう扱うかということです。部分的=>「共有/ flash_messages」%> または =エラーメッセージを表示したり、工夫するビューファイルで (人々はHAMLを使用している場合)の共有/ flash_messages」をレンダリングする:失敗=レンダリング

0

<% :メッセージ

関連する問題