如何检查一个数字是否包含在一个范围内(在一个语句中)?

我正在使用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'