[v] #004 before_action

before_action 是什麼?

Filter 的一種, 定義執行 action 前要跑什麼 method. 另兩種常見的 filters 則是 after_action 以及 around_action.

為什麼要用 before_action?

一方面可以將每個 action 中最前面的重複代碼抽出,寫成一個 method, 用 before_action 執行。
另一方面,因為身分驗證往往是做在 action 前,所以也常被用來做身分驗證。

如何使用 before_action?

class ProductsController < ApplicationController
  before_action :authenticate_user!, only: [:create, :destroy]

  def index
  end
  
  def new
  end
  
  def create
  end
  
  def destroy
  end

  private

  def authenticate_user!
  end

end

除了 :only, 也可以搭配 :except, 比如:

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