我有一个定制的验证器,我想将它应用于同一个模型中的多个属性
现在我下面的作品就好了:
validates :first_name, validator_name: true
validates :age, validator_name: true
validates :gender, validator_name: true
但当我尝试时:
validates :first_name, :age, :gender, validator_name: true
验证器将为第一个属性(:first_name)运行,但其他属性不运行。这有可能实现吗?我花了几个小时在谷歌上搜索,但没有找到任何示例
module Person
class SomeValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
return unless can_do_something?(record, attribute)
#... more code
end
def can_do_something?(record, attribute)
anything_new = record.new_record? || record.attribute_changed?(attribute)
end
end
end
2条答案
按热度按时间ltskdhd11#
不确定这应该只是一个评论还是构成了回答;不管你的要求是什么。
我有一个定制的验证器,我想将它应用于同一个模型中的多个属性
......是
EachValidator
的工作原理。所以你所描述的...
验证器将为第一个属性(:first_name)运行,但不为其他属性运行。
..不可能准确。
例如:
在这种情况下,将通过
StartsWithXValidator
确认所有三个属性。例如:
工作示例
flseospp2#
我认为您可以使用自定义方法验证:
Reference: https://guides.rubyonrails.org/active_record_validations.html#custom-methods