我有一个类Person,它有first_name,middle_name,last_name。我有一个自定义的Each验证器,用于这3个属性,如下所示
validates :first_name, :middle_name, :last_name, nameValidator: true
在这个验证器中,我想检查这3个属性中是否有任何一个发生了变化,并给出一些条件来验证name。为此,我尝试使用attribute_changed?,但它不起作用。
我检查了ActiveModel::Dirty和Activerecod::Dirty的不同方法,但似乎没有任何方法可以检查每个属性的更改。
module Person
class nameValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
return unless can_normalize?(record)
#Normalization code
end
def can_normalize?(record)
anything_new = record.new_record? || attribute_changed?
end
end
end
1条答案
按热度按时间eyh26e7m1#
如果需要检查某个属性是否发生了更改,则需要对记录调用
attribute_changed?
方法,并按如下方式传递此属性或者可以使用像这样的元编程方法
一些注意事项:
在Ruby中,我们通常使用PascalCase作为类名,使用snake_case作为散列键
验证用于数据验证,而不是某种规范化。它通常用于添加验证错误