4.3 フィルター

アクション前に処理を追加する

コントローラのアクションが実行される前に処理を追加したい場合はbefore_actionメソッドを使います。

before_actionに実行したいメソッドのシンボルを渡します。 以下の例はアクションが呼ばれる前にログインが済んでいるかのチェックを実施しています。

class PostsController < ActionController::Base
  before_action :authenticate

  def create
    @post = Post.create
  end

  private
    def authenticate
      unless signed_in?
        redirect_to signin_url
      end
    end
end

アクション後に処理を追加する

コントローラのアクションが実行された後に処理を追加したい場合はafter_actionメソッドを使います。

after_actionに実行したいメソッドのシンボルを渡します。 以下の例はアクションが呼ばれた後にページビューを加算しています。

class PostsController < ActionController::Base
  after_action :increment_pageview, only: [:show]

  def show
    @post = Post.find(params[:id])
  end

  private
    def increment_pageview
      @post.pageview += 1
    end
end

アクション前後に処理を追加する

around_actionメソッドを利用するとアクションの前後に処理を入れることができます。 このとき本来のアクションは明示的にyieldで呼び出す必要があります。

class PostsController < ApplicationController
  around_action :logging

  private
    def logging
      logger.debug "アクションの前に実行される"
      yield
      logger.debug "アクションの後に実行される"
    end
end

フィルターをスキップする

before_actionafter_actionaround_actionにはそれぞれskip_before_actionskip_after_actionskip_around_actionが用意されています。 これらを使うことでフィルタをスキップすることができます。

results matching ""

    No results matching ""