OKADA LABO

[Ruby on rails][ before_action] コントローラーのアクションが実行される前にメソッドを実行

controller.phpでbefore_action :メソッド名と記述すると、

一番最初にそのメソッドの処理を実行できる。
コントローラーのアクションが実行される前にそのメソッドを実行できる。

 

オプションのonlyやexceptを記述すると、
before_actionで実行することをアクションごとに管理できる。

 

たとえば

app/controllers/samples_controller.rbで

class SamplesController < ApplicationController

  before_action :hoge, except: :index
  # indexアクション以外が実行される前にhogeが実行される。

  def index
    @samples = Sample.page(params[:page]).per(5).order("created_at DESC")
  end

  private
  def hoge
    命令
  end
end

ここでonly使うのが良い説もある。
新しいアクションが追加されても影響がないからだ。

 

# only: を使った場合
before_action :hoge, only: [:show, :new, :create, :edit, :update, :destroy]
# except: を使った場合
before_action :hoge, except: :index

たしかに、exceptを使うと、何に適用されつつ、どんな動きのためか把握しづらい。なるほど