我试图仅在它是新记录或更新时存在属性时才调用自定义验证方法。
validates :mobile_number, presence: {
message: 'Please provide your phone number.'
}, if: -> (user) { user.new_record? || !user.mobile_number.blank? }
上面的代码有效,并且只会验证 new_record 上是否存在手机号码,或者在调用 model.update(等)时手机号码是否为空。
validate :mobile_number_is_unique, if: -> (user) { user.new_record? || !user.mobile_number.blank? }
上面的代码不起作用,并且会在调用 new_record 和调用 model.update(etc.) 时验证手机号码的唯一性。 有没有办法将相同的逻辑应用于验证方法,以便在调用 model.update(etc.) 时手机号码为空时不会调用它?
mobile_number_is_unique
进一步上下文的方法,
# Determines if the mobile number is unique.
def mobile_number_is_unique
return errors.add(
:mobile_number, 'Sorry, an account with that phone number already exists.'
) unless User.find_by(
mobile_number: PhonyRails.normalize_number(mobile_number)
).nil?
end
更新
最简洁的实现方式:
validates :mobile_number, presence: {
message: 'Please provide your phone number.'
}, phony_plausible: {
message: 'Sorry, phone number format not recognized.'
}, uniqueness: {
message: 'Sorry, an account with that phone number already exists.'
}, if: -> (user) { user.new_record? || !user.mobile_number.blank? }
使用 validate :mobile_number_is_unique 方法将手机号码包含在当前型号上,需要将其排除才能通过。
最佳答案
如果手机号码存在于记录中,您只需要检查验证。所以你可以使用下面的代码。
validate :mobile_number_is_unique
# Determines if the mobile number is unique.
def mobile_number_is_unique
return unless mobile_number.present?
errors.add(
:mobile_number, 'Sorry, an account with that phone number already exists.'
) unless User.find_by(
mobile_number: PhonyRails.normalize_number(mobile_number)
).nil?
end
关于ruby-on-rails - 如果更新时存在属性,Rails 如何仅调用自定义验证方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54433851/