考虑一个简单的示例:一个具有User
(字符串)和sms_phone_number
(布尔型)模型属性的sms_number_is_verified
类。
具有已验证号码的现有用户现在可以更改其电话号码:
user.sms_phone_number = '+14085551212'
user.save!
此新号码尚未验证,因此应在更新电话号码的同一笔交易中将sms_number_is_verified
设置为false
。
class User < ApplicationRecord
def sms_phone_number=(val)
@sms_number_is_verified = false if val != @sms_phone_number
@sms_phone_number = val
end
end
包含ActiveModel::Dirty,并执行类似的操作:
class User < ApplicationRecord
before_save :update_sms_verification
def update_sms_verification
if saved_change_to_sms_phone_number?
sms_number_is_verified = false
end
end
end
before_save
是否适合使用正确的回调?答案 0 :(得分:1)
您可以使用before_update回调并更改使用字段吗? sms_phone_number_changed?检查字段是否从以前的值更改
class User < ApplicationRecord
before_update :set_number_not_verified
def set_number_not_verified
if sms_phone_number_changed? && sms_phone_number.size > 0
@sms_number_is_verified = false
end
end
end