web-dev-qa-db-ja.com

Rails 3?

Rails Rails 3でmin maxバリデータを実装する方法は何ですか?

Min_ageおよびmax_age属性を持つモデルがあります。

年齢は0..100の範囲にすることができますが、交差値も検証したいので、最大値が最小値以上であることを意味します

{:min_age => 0, :max_age => 0} => true
{:min_age => 0, :max_age => 1} => true
{:min_age => 1, :max_age => 0} => false # max < min
{:min_age => 1, :max_age => 101} => false # out of 0..100 range
55
astropanic

ActiveModel :: Validations :: NumericalityValidatorを確認してください: RailsAPI NumericalityValidator

仕様:

it {
  subject.max_age = 10
  subject.min_age = 20
  subject.should be_invalid
  subject.errors[:min_age].should include("must be less than or equal to #{subject.max_age}")
}

コード:

validates :min_age, numericality: { greater_than: 0, less_than_or_equal_to: :max_age }

validates :max_age, numericality: { less_than_or_equal_to: 100 }

プレゼンスを検証するかどうかはわかりませんが、検証の別のキーとしてそれを追加するだけです。

validates :max_age, numericality: { less_than_or_equal_to: 100 }, presence: true
102
rayban

次のように inclusion ... in を使用することもできます。

validates :height, inclusion: { in: 1..3000, message: 'The height must be between 1 and 3000' }
28
user456584
validates_numericality_of :min_age, greater_than: 0
validates_numericality_of :max_age, less_than_or_equal_to: 100
validates_numericality_of :max_age, greater_than: :min_age

次のように年齢も使用できます。

validates_numericality_of :age, less_than_or_equal_to: 100, greater_than: 0
10