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がそのまま使えるようになる。