0

私のサイトでは、ユーザーが認証されているかどうかを確認しています。私のコントローラーには次のものがあります。

def index
  login_required
  @profile = current_user.profile  ### line 9
  ..

次に、application_controllerに、login_requiredメソッドの定義があります。

def login_required
  unless current_user
    redirect_to root_path, :notice => "Please login first"
  end
end

私のログはルートへのリダイレクトが行われていることを示していますが、それでも実際にはルートパスに移動しておらず、コントローラー->インデックスに戻り、「@ profile=current_user.profile」という行でエラーが発生します。 。これがログです。

Started GET "/meetings" for 127.0.0.1 at 2012-12-05 12:18:12 -0800
  Processing by xyzController#index as HTML
Redirected to http://localhost:3000/
Completed 500 Internal Server Error in 1ms

NoMethodError (undefined method `profile' for nil:NilClass):
  app/controllers/xyz_controller.rb:9:in `index'

リダイレクトしていると表示されているのに、ルートパス(ホームページ)にリダイレクトされないのはなぜですか?何か案は?ありがとう。

4

1 に答える 1

0

処理はその後も行われ続けますredirect_to- 暗黙的なものはありませんreturn。応急処置はreturn、 の結果に応じてインデックス アクションにを追加することですlogin_requiredが、より良い方法はコントローラーでフィルターを使用することです。

于 2012-12-05T20:50:14.780 に答える