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 に答える