`before_action` の後に続くオプション

2024/11/12に公開

before_action の後に続くオプションには便利なものがいくつかあります。これらを活用することで、より柔軟で効率的なコードを書くことができます。以下は、覚えておくと便利なオプションです。

1. only オプション

特定のアクションでのみ before_action を適用するためのオプションです。

before_action :set_user, only: [:show, :edit, :update]

用途: 特定のアクションだけにフィルタを適用したい場合。

2. except オプション

特定のアクション以外で before_action を適用するためのオプションです。

before_action :authenticate_user!, except: [:index, :show]

用途: 一部のアクションを除いてフィルタを適用したい場合。

3. if オプション

条件が true のときにだけ before_action を実行します。

before_action :check_admin, if: -> { current_user.admin? }

用途: 条件が満たされた場合にのみフィルタを適用したい場合。

4. unless オプション

条件が false のときにだけ before_action を実行します。

before_action :set_locale, unless: -> { params[:locale].nil? }

用途: 条件が満たされていないときにのみフィルタを適用したい場合。

5. 複数の条件を使う

複数のオプションを組み合わせることもできます。

before_action :set_data, only: [:show, :edit], if: -> { current_user.active? }

用途: 特定のアクションかつ特定の条件でフィルタを適用したい場合。

6. カスタムメソッド内でのオプション

独自の条件ロジックをメソッド内に記述することで、複雑な条件を判定できます。

before_action :custom_method, if: :some_custom_condition?

private

def some_custom_condition?
  # 任意の条件
  params[:id].present? && current_user.admin?
end

用途: より複雑な条件をチェックしたい場合。

これらのオプションを活用すると、コードを整理し、適用する条件を制御しやすくなります。

Discussion