ast*_*nic 55 validation ruby-on-rails-3
在Rails 3中实现min max验证器的rails方式是什么?
我有一个模型,具有min_age和max_age属性.
年龄可以在0..100的范围内,但我也想验证交叉值,我的意思是最大值大于或等于min
{: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
Run Code Online (Sandbox Code Playgroud)
ray*_*ban 102
查看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}")
}
Run Code Online (Sandbox Code Playgroud)
码:
validates :min_age, numericality: { greater_than: 0, less_than_or_equal_to: :max_age }
validates :max_age, numericality: { less_than_or_equal_to: 100 }
Run Code Online (Sandbox Code Playgroud)
我不知道您是否要验证是否存在,但您只需将其添加为验证的另一个关键,例如
validates :max_age, numericality: { less_than_or_equal_to: 100 }, presence: true
Run Code Online (Sandbox Code Playgroud)
use*_*584 28
您也可以使用包含... in,如:
validates :height, inclusion: { in: 1..3000, message: 'The height must be between 1 and 3000' }
Run Code Online (Sandbox Code Playgroud)
Eas*_*per 10
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
Run Code Online (Sandbox Code Playgroud)
您也可以使用年龄,如下所示:
validates_numericality_of :age, less_than_or_equal_to: 100, greater_than: 0
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
51609 次 |
最近记录: |