AR삽질러

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

Ruby/RubyOnRails-日本語

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

아랑팡팡 2024. 3. 4. 15:09
728x90

 

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

 

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

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

before_validation Objectのvalidation検証が実行される前に呼び出され、Dataの処理や検証のロジックを行う。
after_validation Objectのvalidation検証が実行された後に呼び出され、検証の結果をもとに作業を行う。
before_save Objectが保存される前に呼び出され、保存する前にDataの処理や検証を行う。
after_save Objectが保存された後に呼び出され、保存する前にDataを処理や検証を行う。
around_save Objectの保存「前」「後」に呼び出され、Objectを保存することに使われたトランザクションをラッピングする。
before_update ObjectがUpdateされる前に呼び出される。
after_update ObjectがUpdateされた後に呼び出される。
around_update ObjectのUpdate 「前」、「後」に呼び出され、ObjectをUpdateすることに使われたトランザクションをラッピングする。
after_commit トランザクションがCommitされた後に呼び出される。
after_rollback トランザクションが完了された後、追加作業を行う。

 

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

before_destroy Objectが削除される前に呼び出される。
after_destroy Objectが削除された後呼び出される。
around_destroy Objectが削除された後に呼び出され、Objectを削除することに使われたトランザクションをラッピングする。

 

 

5. after_initialize と after_find

 after_initalizeコールバック

 - Active Recordオブジェクトがインスタンス化されるたびに呼び出される。インスタンス化は、直接 newを実行する他に、DataBaseからRecordが読み込まれる時にも行われる。

class User < ApplicationRecord
	after_initialize :set_defaults
    
    private
    	def set_defaults
        	self.role ||= 'regular'
        end
end

 

 after_initializeコールバックを使い、Userオブジェクトが初期化される時に、role属性を基本値に設定する。

 オブジェクトが生成される時に該当のコールバックが実行され roleがない場合、基本設定、値の 'regular'に設定される。

 

 after_findコールバック

 - Active Recordがデータベースからコードを1件読み込むたびに呼び出され、after_findと after_initializeが両方で定義されている場合、after_findが先に呼び出される。

class Product < ApplicationRecord
	after_find :log_view
    
    private
    	def log_view
        	puts 'Product #{id} を探しました!'
        end
end

 

 after_findコールバックを使い、Productオブジェクトを探した後、該当するRecordを探したときに logに記録する。

 

6. コールバックの実行

create 新しいRecordを生成し、DataBaseに保存する。
create! createと同じだけど、validate検証に失敗したら、例外を発生させる。
save 更新された内容がvalidation検証を通ったらDataBaseに保存する。
save! saveと同じだけど、更新された内容がvalidation検証に失敗したら例外を発生させる。
save(validate: false) validation検証があってもをしない、更新された内容を保存する。
save!(validate: false) save(validate: false)と同じだけど、保存に失敗したら例外を発生させる。
update 該当する Recordの値を UpdateしDataBaseに保存する。
update! updateと同じだけど、Updateに失敗したら例外を発生させる。
update_attribute 該当する属性の値をUpdateしDataBaseに保存する。
destroy 該当する RecordをDataBaseから削除する。
destroy! destroyと同じだけど、削除に失敗したら例外を発生させる。
destroy_all 条件に合う 全てのRecordを削除する。
destroy_by 特定の条件をもとに Recordを削除する。
toggle! boolean値を toggleする。
touch Recordの timestempを更新し、touchする。
valid? 該当Recordの 有効性を確認する。

 

after_findコールバックは以下の finderメソッドを実行すると呼び出される。

all 該当するModelの全てのRecordを変換する。
first 該当するModelの初めてのRecordを変換する。
find 与えられたIDに該当するModelのRecordを変換する。
find_by 与えられた条件に該当する最初のRecordを変換する。
find_by_* (動的に生成されるRocord)与えられた条件に該当する最初のRecordを変換する。
find_by_*! (動的に生成されるRocord)与えられた条件に該当する最初のRecordを変換する。Recordがない場合、例外を発生させる。
find_by_sql 与えられたSQLに該当する結果を変換する。
last 該当するModelの最後のRecordを変換する。
728x90
반응형
LIST