アクションの後に処理を実行
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(コールバック名)