AR삽질러

Rails 一日一つメソッド (Day49) Active Record(6) - after_create, before_create, around_create 본문

Ruby/RubyOnRails-日本語

Rails 一日一つメソッド (Day49) Active Record(6) - after_create, before_create, around_create

아랑팡팡 2024. 3. 8. 15:19
728x90

 

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する時に動く。

728x90
반응형
LIST