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