1

ファイルで次のように定義していapplication_controller.rbます。

def redirect_back_or(default)
  redirect_to(session[:return_to] || default)
  session.delete(:return_to)
end

def store_location
  session[:return_to] = request.url
end

def after_sign_in_path_for(resource)
  r = session[:return_to] || user_root_url
  session.delete(:return_to)
  r
end

ユーザーをサインイン前の元の場所に戻そうとしています。場所が保存されていない場合は、ユーザーをルート ページに戻そうとしています。

これをコントローラーの 1 つで呼び出します。

if current_user.nil?
  store_location
  redirect_to home_login_url, alert: "You must be logged in to purchase subscriptions"
  return
end

デバッガーをステップ実行してsession[:return_to]get set を監視しましたが、ログオンしてafter_sign_in_path_for(resource)呼び出された後、session[:return_to]null になります。

return_toログイン後も変数を永続化するにはどうすればよいですか?

Rails 3.2.1 と Devise 2.1.2 を実行しています

4

1 に答える 1

0

ハッシュでDeviseのエントリを上書きしていたことがわかりました。:return_toDeviseが使っているものだと思います。私はこれを完全に異なる方法で実装しましたが、問題がある場合は名前の競合を探してください

于 2012-12-04T21:14:25.907 に答える