我使用了令人敬畏的client_side_validations宝石,并且我已经编写了一个这样的自定义验证器:
class PersonNameValidator < ActiveModel::EachValidator
def validate_each(record, attr_name, value)
record.errors.add(attr_name) if record.errors.has_key?(:person_id)
end
end
如果:person_name
无效,我的目标是让虚拟属性:person_id
无效。我的问题是,在另一个验证器中使用if record.errors.has_key?
作为确定另一个属性是否有效的方法是否合理?
我读到验证器按照声明的顺序触发,因此这在我的模型中:
validates :person_id, numericality: { greater_than: 0 }
validates :person_name, presence: true
依靠这种技术作为保持我的验证DRY的方法是明智的吗?