我正在使用Ruby on Rails 3.0.9,我想检查一个数字是否包含在一个范围内。也就是说,如果我有一个变量number = 5
,我想检查1 <= number <= 10
并检索一个布尔值,如果number
值包含在该范围内。
我可以这样做:
number >= 1 && number <= 10
但我想在一个声明中这样做。我怎么能这样做?
答案 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)
(1..10).include? n
(1..10).cover? n
n.between? 1, 10
validates :n, numericality: {only_integer: true, greater_than_or_equal_to: 1, less_than_or_equal_to: 10}
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