gpt4 book ai didi

ruby-on-rails - 如果更新时存在属性,Rails 如何仅调用自定义验证方法

转载 作者:太空宇宙 更新时间:2023-11-03 17:42:40 24 4
gpt4 key购买 nike

我试图仅在它是新记录或更新时存在属性时才调用自定义验证方法。

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com