古いバージョンのドキュメントです。最新のバージョンはRails7.0.0

Railsドキュメント(v6.0.2.1)

アクションの後に処理を実行

layout: page

説明

アクションの後に処理を実行

使い方

after_action(アクション名 [, オプション])

オプション

オプション 説明
:only 実行するアクション
:except 実行しないアクション
:if 実行する条件を指定
:unless 実行されない条件を指定

アクションの後に処理を実行

after_action :store_location
def store_location
  if request.fullpath !~ Regexp.new('\\A/users/.*\\z') && !request.xhr?
    session[:previous_url] = request.fullpath
  end
end

実行するアクションを指定

after_action :render_form, only: [:new :edit]
def render_form
  render 'form'
end

複数指定

before_action :user1
before_action :user2

ソースコード

アクションの前後に処理を実行

layout: page

説明

アクションの前後に処理を実行

使い方

around_action(アクション名 [, オプション])

オプション

オプション 説明
:only 実行するアクション
:except 実行しないアクション
:if 実行する条件を指定
:unless 実行されない条件を指定

アクションの前後に処理を実行

around_action :render_form, only: [:new :edit]
def render_form
  render 'form'
end

複数指定

before_action :user1
before_action :user2

ソースコード

アクションの前に処理を実行

layout: page

説明

アクションの前に処理を実行

使い方

before_action(アクション名 [, オプション])

オプション

オプション 説明
:only 実行するアクション
:except 実行しないアクション
:if 実行する条件を指定
:unless 実行されない条件を指定

アクションの前に処理を実行

before_action :require_permission
def require_permission
  unless current_user.partner? || current_user.admin?
    redirect_to admin_root_path, alert: 'ここから先は管理者限定です!'
  end
end

実行するアクションを指定

before_action :render_form, only: [:new :edit]
def render_form
  render 'form'
end

複数指定

before_action :user1
before_action :user2

ソースコード

コールバックについて

layout: page

コールバックとは

コールバックとは、オブジェクトが変わる時に実行できる処理のこと
コールバックを使うことによって、モデルの作成後や保存前などに実行できるコードを書くことが可能

コールバックの種類

メソッド参照例

before_destroy :delete_parents
private
  def delete_parents
    self.class.delete_by(parent_id: id)
  end

コールバックオブジェクト

class BankAccount < ActiveRecord::Base
  before_save      EncryptionWrapper.new
  after_save       EncryptionWrapper.new
  after_initialize EncryptionWrapper.new
end
class EncryptionWrapper
  def before_save(record)
    record.credit_card_number = encrypt(record.credit_card_number)
  end
  def after_save(record)
    record.credit_card_number = decrypt(record.credit_card_number)
  end
  alias_method :after_initialize, :after_save
  private
    def encrypt(value)
      # Secrecy is committed
    end
    def decrypt(value)
      # Secrecy is unveiled
    end
end

モデルが作成される時に実行

layout: page

説明

モデルが作成される時に実行

使い方

after_initialize do |x|
  実行したい処理
end

モデルが作成される時に実行

after_initialize do |user|
  puts "初期化"
end

ソースコード

モデルをタッチするたびに実行

layout: page

説明

モデルをタッチするたびに実行
コールバックメソッドの一つ

使い方

after_touch |x|
  実行したい処理
end

モデルをタッチするたびに実行

after_touch do |user|
  puts "タッチ"
end

デフォルトのコールバックを上書き

layout: page

説明

デフォルトのコールバックを上書き

使い方

define_model_callbacks(メソッド名 [, only: タイプ])

タイプ

タイプ 説明
:after
:before
:around 前後

define_model_callbacks :initializer, only: :after

ソースコード

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

layout: page

説明

アクションの後に処理を追加
after_actionより後に処理

使い方

append_after_action(コールバック名 [, オプション])

オプション

オプション 説明
:only 実行するアクション
:except 実行しないアクション
:if 実行する条件を指定
:unless 実行されない条件を指定

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

append_after_action :verify_same_origin_request
def verify_same_origin_request
  if marked_for_same_origin_verification? && non_xhr_javascript_response?
    logger.warn CROSS_ORIGIN_JAVASCRIPT_WARNING if logger
    raise ActionController::InvalidCrossOriginRequest, CROSS_ORIGIN_JAVASCRIPT_WARNING
  end
end

ソースコード

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

layout: page

説明

アクションの前後に処理を追加
around_actionより後に処理

使い方

append_around_action(コールバック名 [, オプション])

オプション

オプション 説明
:only 実行するアクション
:except 実行しないアクション
:if 実行する条件を指定
:unless 実行されない条件を指定

ソースコード

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

layout: page

説明

アクションの前に処理を追加
before_actionより後に処理

使い方

append_before_action(コールバック名 [, オプション])

オプション

オプション 説明
:only 実行するアクション
:except 実行しないアクション
:if 実行する条件を指定
:unless 実行されない条件を指定

ソースコード

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

layout: page

説明

アクションの後に処理を追加
after_actionより前に処理

使い方

prepend_after_action(コールバック名 [, オプション])

オプション

オプション 説明
:only 実行するアクション
:except 実行しないアクション
:if 実行する条件を指定
:unless 実行されない条件を指定

ソースコード

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

layout: page

説明

アクションの前後に処理を追加
around_actionより前に処理

使い方

prepend_around_action(コールバック名 [, オプション])

オプション

オプション 説明
:only 実行するアクション
:except 実行しないアクション
:if 実行する条件を指定
:unless 実行されない条件を指定

ソースコード

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

layout: page

説明

アクションの前に処理を追加
before_actionより前に処理

使い方

prepend_before_action(コールバック名 [, オプション])

オプション

オプション 説明
:only 実行するアクション
:except 実行しないアクション
:if 実行する条件を指定
:unless 実行されない条件を指定

ソースコード

アクションの後のコールバックをスキップ

layout: page

説明

アクションの後のコールバックをスキップ

使い方

skip_after_action(コールバック名)

ソースコード

アクションに関するコールバックをスキップ

layout: page

説明

アクションに関するコールバックをスキップ

使い方

skip_around_action(コールバック名)

ソースコード

アクションの前のコールバックをスキップ

layout: page

説明

アクションの前のコールバックをスキップ

使い方

skip_before_action(コールバック名)

ソースコード