異なる条件付きの Rails と before_action
概要
コントローラーには次の before_actions を設定しています。
before_action :require_user, unless: :public?, only: [:show]
before_action :require_user, only: [:index, :edit, :update]
基本的に、パブリックの場合にのみ show アクションでフィルター required_front_user を実行しようとしています?は誤りです。
残りのアクションでは、フィルターを常に実行するようにします。
最初の before_action 設定は無視され、2 番目の設定によって完全に上書きされるようです。
before_action ステートメントを使用して両方の組み合わせを組み合わせることができますか、それともフィルター自体にこのロジックを実装する必要がありますか?
これも機能しません:
before_action :require_user, if: :public?, only: [:index, :edit, :update]
before_action :require_user, unless: :public?, only: [:show, :index, :edit, :update]
公立なら?と思いました。 true を返すと最初のセットアップがロードされ、false を返すと 2 番目のセットアップがロードされます。たまたま 2 番目のセットアップのみがロードされ、パブリックであれば? == true の場合、before_action はトリガーされません。
これは私がそれが機能することがわかったものです:
before_action :require_user_when_public, if: :public?, only: [:index, :edit, :update]
before_action :require_user_when_no_public, unless: :public?, only: [:show, :index, :edit, :update]
protected
def require_user_when_public
require_user
end
def require_user_when_no_public
require_user
end
それは非常に醜いです:/
解決策
before_action :require_user, only: require_user_before_actions
private
def require_user_before_actions
actions = [:index, :edit, :update]
actions << :show unless public?
actions
end