AR삽질러

Rails 一日一つメソッド (Day44) Active Record(2)コールバック 본문

Ruby/RubyOnRails-日本語

Rails 一日一つメソッド (Day44) Active Record(2)コールバック

아랑팡팡 2024. 2. 29. 14:17
728x90

 

Rails 一日一つメソッド (Day44) Active Record(2)コールバック

 

1. Active Recordコールバック

 - Active Record コールバックは、Rails モデルで発生する特定のイベントに自動的に実行されるメソッドで、 これにより、モデルのライフサイクル中に特定のタスクを実行でる。 データの保存、更新、削除などの作業の「前」、「後」に特定のロジックを実行してコードを再利用し、重複を防止することができ、モデルの動作を細かく制御することができる。

class User < ApplicationRecord
	after_create -> { puts "始めまして!" }
end
irb> @user = User.create
始めまして!

 

2. コールバックの概要

 - コールバックは、オブジェクトのライフルサイクル期間における特定の瞬間に呼び出されるメソッドのことで、コールバックで、Active Recordオブジェクトが作成、更新、保存、削除、検証、DataBaseから読み込み、などのイベント発生時に常に実行されるコードを書けるようになる

 

3. コールバックの登録

 - コールバックをModelに登録し、マクロのようなスタイルのClassメソッドを使う。

 

3-1) 登録1

class User < ApplicationRecord
	validates :login, :email, presence: true
    
    before_validation :ensure_login_has_a_value
    
    private
    	def ensure_login_has_a_value
        	if login.blank?
            	self.login = email unless email.blank?
            end	
        end
end

 before_valibationに ensure_login_has_a_valueメソッドを登録しvalidate検証前に login属性が空いている場合、email属性を使って値にする。

 

3-2) 登録2

class User < ApplicationRecord
	validates :login, :email, presence: true
    
    before_create do
    	self.name = login.capitalize if name.blank?
    end
end

 before_createにブロックを使って生成前に name属性が空いている場合、login属性を使って値にする。

 

3-3) 登録3

class User < ApplicationRecord
	before_create ->(user) { user.name = user.login.capitalize if user.name.blank? }
end

ラムダ表現式を用いて before_createコールバックを定義し、ラムダ渡して生成前に name属性が空いている場合、login属性を使って値にする。

 

4. 利用可能なコールバック

4.1) オブジェクトの作成 (Object Creation)

before_validation Objectの Validation検証が実行する「前」に呼び出され、Dataを処理したり検証する。
after_validation Objectの Validation検証が実行する「後」で、呼び出され、検証の結果を持ってロジックを実行する
before_save Objectが保存される前に呼び出され、Dataを保存する前に、Dataを処理したり検証するためのロジックを行う。
after_save Objectが保存される後に呼び出され、保存されたDataと関連がある作業を行う。
around_save Objectが保存された「前、後」に呼び出され、オブジェクトを保存することに使われたトランザクションをラッピングし、特定のロジックを実行したり、操作する時に使う。
before_create Objectが生成される前に呼び出され、Objectを生成する前に、前処理タスクを実行する。
after_create Objectが生成される後に呼び出され、Objectと関連された作業を行う。
around_create Objectが生成される「前、後」に呼び出され、Objectを生成することに使われた、トランザクションをラッピングする。
after_commit トランザクションがCommitされた後、呼び出されたり rollbackされた後に呼び出され、追加作業を行う。
after_rollback

 

 

4.2) オブジェクトの更新 (Object Update)

 

 

4.3) オブジェクトの削除 (Object Destruction)

 

 

 

728x90
반응형
LIST