1

Deviseは奇妙な振る舞いをしています。赤またはエラーメッセージは表示されますが、緑または成功メッセージは表示されません。

これは、ユーザーがサインインしているかどうかに応じて、サインインページまたはホームページにリダイレクトするようにルーティングとコントローラーを変更した後に発生しました。

したがって、routes.rbには次のようになります。

devise_for :users

root :to => "questions#redirect_on_visit" 

match 'home', :to => "questions#index"

およびコントローラー:

before_filter :authenticate_user!, :except => [:redirect_on_visit]

def redirect_on_visit
  if user_signed_in?       
    redirect_to home_path      
  else    
    redirect_to new_user_session_path      
  end
end

また、サインイン/サインアウト後に適切なページにリダイレクトするようにアプリケーションコントローラーを変更しました。

 protected

 def after_sign_in_path_for(resource)    
   stored_location_for(:user) || root_path      
 end

 private

 def after_sign_out_path_for(resource)
   stored_location_for(:user) || root_path    
 end
4

2 に答える 2

3

私は非常にしびれていました。私が持っているという事実はroot :to => "questions#redirect_on_visit"、ユーザーがアクセス、サインイン、またはサインアウトするたびにリダイレクトされます。リダイレクトは明らかにフラッシュメッセージを洗い流していました。

ついに私は探していた解決策を見つけました。ここでflash.keep(:notice)述べたように、フラッシュメッセージを保存するためです。

于 2012-06-20T21:10:13.060 に答える
0

あなたの問題は、ログイン=>ルート=>ホームからの複数のリダイレクトです。 フラッシュオブジェクトには、単一のリクエストに対してのみライフリーブがあります。

redirect_on_visitルーティングを書いてafter_sign_in_path_forafter_sign_out_path_for

このようなもの

def after_sign_in_path_for(resource)    
   stored_location_for(:user) ||  home_path    
 end

 private

 def after_sign_out_path_for(resource)
   stored_location_for(:user) || new_user_session_path   
 end
于 2012-06-20T08:28:43.217 に答える