在 Rails 3 中实现最小最大验证器的 Rails 方法是什么?
我有一个模型,具有 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
最佳答案
查看 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 }
我不知道您是否想验证是否存在,但您只需将其添加为验证的另一个 key ,例如
validates :max_age, numericality: { less_than_or_equal_to: 100 }, presence: true
关于validation - 如何在 Rails 3 中实现最小/最大验证器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4416278/