7

我想在我的模型中创建一个自定义验证方法,并在自定义验证方法中使用一些现有的验证器(特别是validates_numericality_of)。

这可能吗?如果是这样,我该怎么做?

在某些情况下:我们正在使用具有哈希属性的非 ActiveRecord ORM。我想对哈希内的东西进行验证。如果有办法做到这一点,比如validates_numericality_of :my_attribute.:subattribute或其他什么,那也很好。

谢谢你。

4

1 回答 1

8

我相信这应该对你有用。

class MyCustomValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    validator = ActiveModel::Validations::NumericalityValidator.new(
      :greater_than_or_equal_to => options[:min],
      :less_than_or_equal_to => options[:max],
      :attributes => value[:some_attribute]
    )
    validator.validate(record)
  end
end

你可以像这样使用它:

validates(
  :my_pseudo_attribute,
  :my_custom => {
    :min => 0,
    :max => 100
  }
)

def my_pseudo_attribute
  {
    :some_attribute => 'foo'
  }
end
于 2014-11-13T20:00:25.743 回答