web-dev-qa-db-ja.com

before_actionを1つを除くすべてのコントローラーとアクションで実行するにはどうすればよいですか?

Rails 4.2.xアプリ、認証のための工夫があります-私はいくつかのコントローラーを持っています。

考案したauthenticate_userが欲しい!ホームコントローラインデックスアクションを除くすべてのコントローラとアクションで実行されるメソッド。 (もちろん、authenticate_user!自体が、ログインなどの工夫アクションを実行するように注意します)

すべてのコントローラーアクションがapplication_controller.rbのbefore_actionを実行することを確認できます。

class ApplicationController < ActionController::Base
  before_action :authenticate_user!
  ...
end

allコントローラーで特定のアクションセットを制限することもできます。

class ApplicationController < ActionController::Base
  before_action :authenticate_user!, except: [:index]
  ...
end

しかし、ホーム/インデックスだけを例外にする方法はわかりません。

もちろん、手動でbefore_action :authenticate_user!をすべてのコントローラーに追加し、インデックスアクションのホームコントローラーに例外を追加します。しかし、これはあまりドライではありません。新しいコントローラーを追加する場合は、それぞれにbefore_actionを忘れずに追加する必要があります。

26
Anand

あなたがしなければならないことはautheticate_userを設定することです!そのようなすべてのコントローラーで:

class ApplicationController < ActionController::Base
  before_action :authenticate_user!
  ...
end

そして、あなたのHomeControllerでそれを行います:

class HomeController < ApplicationController
  skip_before_action :authenticate_user!, only: [:index]
  ...
end

これがあなたを助けることを願っています!

48
I'm_ADR