Rails 一日一つメソッド (Day49) Active Record(6) - after_create, before_create, around_create
Rails 一日一つメソッド (Day49) Active Record(6) - after_create, before_create, around_create
1. before_create, after_create, around_create
before_create
- オブジェクトが生成される前に実行されるコールバックで、オブジェクトが生成される前に、初期化を行う時に使われる。
after_create
- オブジェクトが生成された後に実行されるコールバックで、オブジェクトが生成された後、他のModelとに関係を設定したりするのができる。
around_create
- オブジェクトが生成される過程を囲まれているコールバックで、オブジェクトの生成 「前」、「後」 に行う。
2. before_create
class User < ApplicationRecord
before_create :downcase_email
private
def downcase_email
self.email = email.downcase
end
end
before_createコールバックは、downcase_emailメソッドを呼び出して、Userが生成される前に、Emailを小文字で変換できる。これで、Emailの重複を確認できるようになる。
3. after_create
class User < ApplicationRecord
after_create :send_welcome_email
private
def send_welcome_email
UserMailer.with(user: self).welcome_email.deliver_now
end
end
after_createコールバックは、Userが生成された後、自動にwelcome_emailを送るようになる。
4. around_create
class User < ApplicationRecord
around_create :log_creation
private
def log_creation
puts "User Emailが生成される前。"
yield
puts "User Emailが登録されました"
end
end
Userが生成される時、puts "User Emailが生成される前。"を出力し、yieldでオブジェクトを生成する。DataBaseに保存されたらputs "User Emailが登録されました"が出力される。
5. saveとcreateの違い
before_create | オブジェクトが初めて生成されDatabaseに保存される前に呼び出される。 |
after_create | オブジェクトが生成されDatabaseに保存される後に呼び出される。 |
around_create | オブジェクトが生成されData baseに保存される 「前」、「後」に呼び出される。 |
createコールバックは、オブジェクトが生成され、保存されうる時だけ動く。
createコールバックは、オブジェクトが初めて生成される時に、初期化を行い、新しいRecordを生成し、追加作業を行う時に使う。
before_save | オブジェクトがDataBaseに保存される前に呼び出される。 |
after_save | オブジェクトがDataBaseに保存された後に呼び出される。 |
around_save | オブジェクトがDataBaseに保存される 「前」、「後」に呼び出される。 |
saveコールバックは、オブジェクトがDataBaseに保存されるたびに動く。
saveコールバックは、オブジェクトが保存される度に必要な作業を行うため、新しいRecordを生成したり、既存のRecordをUpdateする時に動く。