AR삽질러

Rails 一日一つメソッド (Day46) Active Recordコールバック(4) - before_validation, after_validation 본문

Ruby/RubyOnRails-日本語

Rails 一日一つメソッド (Day46) Active Recordコールバック(4) - before_validation, after_validation

아랑팡팡 2024. 3. 5. 14:26
728x90

 

Rails 一日一つメソッド (Day46) Active Recordコールバック(4) - before_validation, after_validation

 

1. Active Recordコールバック before_validationとは

 - before_validationとは、ActiveRecord ModelでDataのValidation検証が行われる前に呼び出され、Dataを処理したり変更するために使う。

 

2. before_validation例題

 

コールバックの登録

 - コールバックを登録するために、Modelでbefore_validationを使う。

例)入力されたEmailをbefore_validationコールバックで小文字に変換する。

class User < ApplicationRecord
	before_validation :nor_email
    
    private
    	def nor_email
        	self.email = email.downcase if email.present?
        end
end

 

 

例)UserがEmailを登録する時、50文字を超えるときは before_validationが実行される。

class User < ApplicationRecord
	before_validation :email_length
    
    private
    	def email_length
        	if email.present? && email.length > 50
            	errors.add(email, "Emailは50文字以内で入力してください!"
            end
        end
end

 

1. Userが Emailを入力する。

2. before_validationが実行される。

3. email_lengthメソッドが実行されEmailの長さを検証する。

4. Emailの長さが50文字を超えるときは、エラーが発生する。

 


 

3. Active Recordコールバック after_validationとは

 - 該当するオブジェクトがValidation検証に成功した時に呼び出され、検証されたDatani追加作業を行う。

 

4. after_validation例題

例)Userが登録された後、Emailを小文字で変換し保存する。

class User < ApplicationRecord
	after_validation :downcase_email
    
    private
    	def downcase_email
        	self.email = email.downcase if email.present?
        end
end

 

user = User.new(email: 'ARANG@example.com')
user.valid?
puts user.email # arang@example.com

 

 

 

728x90
반응형
LIST