일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- CSS
- Web
- 건담베이스
- 일본어
- 인프런
- 비즈니스일본어
- nico
- 単語
- jsp
- DART
- メソッド
- Python
- 자바
- Spring
- 연습문제
- C로 시작하는 컴퓨터 프로그래밍4판
- 디지몬
- javascript
- rails7
- vscode
- 건담
- springboot
- java
- Flutter
- 一日一つメソッド
- 반다이몰
- html
- rails
- 日本語
- ruby
- Today
- Total
AR삽질러
Rails 一日一つメソッド (Day48) Active Record(5) - before_save, after_save, around_save 본문
Rails 一日一つメソッド (Day48) Active Record(5) - before_save, after_save, around_save
아랑팡팡 2024. 3. 7. 14:34
Rails 一日一つメソッド (Day48) Active Record(5) - before_save, after_save, around_save
1. before_save, after_save, around_save
- RailsのActiveRecordでは、DataBase Recordの保存前(before_save)、保存後(after_save)、保存周辺(around_save)でコールバックを設定できる。
before_save
- Recordが保存される前に、実行され、DataBaseにRecordを保存する前にFieldを更新したり検証する時に使う。
after_save
- Recordが保存された後に実行され、RecordがDataBaseに保存された後に、追加作業を行う時に使う。
around_save
- Recordが保存される前(before_save)、保存された後(after_save)に実行され、ロジックを実行できる。
2. before_save
2-1) UserをUpdateする時にEmailを小文字に変更したい時
class User < ApplicationRecord
before_save :downcase_email
private
def downcase_email
sefl.email = email.downcase
end
end
- UserがEmailを入力し、Emailを保存する前に、小文字で変換し、DataBaseに保存する。
2-2) Userのユーザーの名前と姓を組み合わせてニックネームを作成する。
class User < ApplicationRecord
before_save :generate_nickname
private
def generate_nickname
self.nickname = "#{first_name}_#{last_name}"
end
end
2-3) User写真Upload時、resizeする。
class User < ApplicationRecord
before_save :resize_image
private
def resize_image
if profile_image.attached? && profile_image.blob.variable?
resized_image = profile_image.variant(resize: '300x300').processed
profile_image.attach(resized_image)
end
end
end
profile_image.attached?
- profile_imageを登録したのかを確認する。
profile_image.blob.variable?
- blob.variableで、写真が変換できるのかを確認する。
profile_image.variant(resize: '300x300').processed
- 写真をresizeし、.processedで、変換を実装する。
3. after_save
3-1) Userが保存される時、logを出力する。
class User < ApplicationRecord
after_save :log_user_saved
private
def log_user_saved
puts "Userが #{id}保存されました"
end
end
User保存に成功したら、指定したメッセージが出力される。
3-2) User登録に成功した時、歓迎のMailをUserに送る。
class User < ApplicationRecord
after_save :send_welcome_email
private
def send_welcome_email
UserMailer.with(user: self).welcome_email.deliver_now
end
end
4. around_save
4-1) around_saveが呼び出される時を確認する。
class User < ApplicationRecord
around_save :log_save_process
private
def log_save_process
puts "User保存"
yield
puts "User保存成功"
end
end
log_save_processで、Userを保存する前にメッセージを出力し、yieldで保存を行う、その後、保存ができたら成功メッセージが出力される。
'Ruby > RubyOnRails-日本語' 카테고리의 다른 글
Rails 一日一つメソッド (Day50) Active Record(7) - before_commit, after_commit (0) | 2024.03.11 |
---|---|
Rails 一日一つメソッド (Day49) Active Record(6) - after_create, before_create, around_create (0) | 2024.03.08 |
Rails 一日一つメソッド (Day47) Ruby - self (0) | 2024.03.06 |
Rails 一日一つメソッド (Day46) Active Recordコールバック(4) - before_validation, after_validation (0) | 2024.03.05 |
Rails 一日一つメソッド (Day45) Active Record(3)コールバック (0) | 2024.03.04 |