【问题标题】:How do I use an existing Rails validator within a custom validation method?如何在自定义验证方法中使用现有的 Rails 验证器?
【发布时间】:2014-08-15 19:37:18
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

  • 我也有类似的情况。在我的应用程序中存在一个模式,其中必须存在一个字段如果满足条件并且不存在除非满足条件。所以我希望我的自定义验证器使用 PresenceValidator 和 AbsenceValidator。你解决过你的问题吗?
  • 嗨@samo,我通过编写一个自定义验证器解决了我的问题,该验证器实现了我自己的验证,类似于validates_numericality_of。有机会我会看看你提出的解决方案。

标签: validation ruby-on-rails-4 custom-validators


【解决方案1】:

我相信这应该适合你。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多