如何检查一个数字是否包含在一个范围内(在一个语句中)?
我正在使用Ruby on Rails 3.0.9,我想检查一个数字是否包含在一个范围内。 也就是说,如果我有一个variablesnumber = 5
我想检查1 <= number <= 10
并检索一个布尔值,如果数值包括在该范围内。
我可以这样做:
number >= 1 && number <= 10
但我想在一个声明中这样做。 我怎样才能做到这一点?
(1..10).include?(number)
就是诀窍。
顺便说一句:如果你想validation一个数字使用ActiveModel::Validations
,你甚至可以做到:
validates_inclusion_of :number, :in => 1..10
在这里阅读有关validates_inclusion_of
或者Rails 3的方式:
validates :number, :inclusion => 1..10
枚举#包括哪些内容? :
(1..10).include? n
范围#盖? :
(1..10).cover? n
具有可比性#? :
n.between? 1, 10
数值validation器 :
validates :n, numericality: {only_integer: true, greater_than_or_equal_to: 1, less_than_or_equal_to: 10}
包含validation器 :
validates :n, inclusion: 1..10
如果它不是一个validation过程的一部分,你可以使用#between?
:
2.between?(1, 4) => true
在Ruby 1.9中,最直接的翻译似乎是Range#cover? :
如果obj位于beg和end之间,则返回true,即beg <= obj <= end(或者在exclude_end?为true时为end exclusive)。
如果你想知道如何不同于Range#include?
如果它是一个非数字范围,那么后者会迭代范围的所有元素。 看到这个博客文章更详细的解释。
Rails 4
如果你想通过ActiveModel :: Validations,你可以使用
validates_inclusion_of :number, :in => start_number..end_number
或Rails 3语法
validates :number, :inclusion => start_number..end_number
但是,我发现最简单的方法是
number.between? start_number, end_number
要获得表单提交的准确错误消息,请尝试这些
validates_numericality_of :tax_rate, greater_than_or_equal_to: 0, less_than_or_equal_to: 1, message: 'must be between 0 & 100'