如何在自定义验证方法中使用现有的Rails验证器?

nc.*_*nc. 6 validation custom-validators ruby-on-rails-4

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

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

在某些情况下:我们使用的非ActiveRecord ORM的属性为哈希。我想对哈希内的东西执行验证。如果有办法做到这validates_numericality_of :my_attribute.:subattribute一点,那也可以。

谢谢。

Sam*_*amo 5

我相信这应该为您工作。

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
Run Code Online (Sandbox Code Playgroud)

您可以这样使用它:

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

def my_pseudo_attribute
  {
    :some_attribute => 'foo'
  }
end
Run Code Online (Sandbox Code Playgroud)