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

时间:2011-07-30 07:57:23

标签: ruby-on-rails ruby ruby-on-rails-3 numbers range

我正在使用Ruby on Rails 3.0.9,我想检查一个数字是否包含在一个范围内。也就是说,如果我有一个变量number = 5,我想检查1 <= number <= 10并检索一个布尔值,如果number值包含在该范围内。

我可以这样做:

number >= 1 && number <= 10

但我想在一个声明中这样做。我怎么能这样做?

7 个答案:

答案 0 :(得分:144)

(1..10).include?(number)就是诀窍。

顺便说一句:如果您想使用ActiveModel::Validations验证号码,您甚至可以这样做:

validates_inclusion_of :number, :in => 1..10

关于validates_inclusion_of

,请阅读here

或Rails 3方式:

validates :number, :inclusion => 1..10

答案 1 :(得分:54)

Enumerable#include?

(1..10).include? n

Range#cover?

(1..10).cover? n

Comparable#between?

n.between? 1, 10

Numericality Validator

validates :n, numericality: {only_integer: true, greater_than_or_equal_to: 1, less_than_or_equal_to: 10}

Inclusion Validator

validates :n, inclusion: 1..10

答案 2 :(得分:15)

如果它不是验证过程的一部分,您可以使用#between?

2.between?(1, 4)
=> true

答案 3 :(得分:4)

要在表单提交上提供准确的错误消息,请尝试以下

validates_numericality_of :tax_rate, greater_than_or_equal_to: 0, less_than_or_equal_to: 1, message: 'must be between 0 & 100'

答案 4 :(得分:3)

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

答案 5 :(得分:2)

在Ruby 1.9中,最直接的翻译似乎是Range#cover?

  

如果obj在beg和end之间,则返回true,即beg&lt; = obj&lt; = end(或   exclude_end时结束独占?是真的)。​​

如果你想知道它与Range#include?的不同之处,那就是后者如果它是非数字范围则迭代范围的所有元素。有关更详细的说明,请参阅此blog post

答案 6 :(得分:1)

如果要检查自定义数组中是否存在特定编号,

例如,我想知道list = [1,4,6,10]中是否包含5

list.include? 5 => false
list.include? 6 => true