before_actionについて

はじめに

railsのアプリを触っているとちょくちょく目に入るbefore_actionについて調べた。

before_actionとは

コントローラの全てのアクションが実行されるに実行したいメソッドを記述できる。

使用例

コントローラのアクションを実行する前に処理を行いときや、同じ記述の処理をまとめたいときに使う。

class UsersController < ApplicationController
  before_action :メソッド名
end

アクションが実行される前に処理を実行する

deviseで使えるようになるメソッドauthenticate_user!は、ログインしていない場合、ログインページにリダイレクトさせるヘルパーメソッド。

class UsersController < ApplicationController
  before_action :authenticate_user!
end

とすると、各アクションが動く前にログインしているかしていないかを判断し、ログインしていなければアクションを動かすことなくログインページが表示されるようになる。

同じ記述をまとめる

各アクション内で重複しているコードは、それをメソッド化して、各アクションが動く前にbefore_actionで実行させることで、処理をまとめることができる場合がある。

@user = User.find(params[:id])

を複数のアクションで使用していた場合などは、

def set_user
    @user = User.find(params[:id])
end

とメソッド化し、

before_action :set_user

と書いてあげることで、各アクションでは@userがそのまま使えるようになる。