我正在使用Ruby on Rails 3.0.9,我想检查一个数字是否包含在一个范围内。也就是说,如果我有一个变量number = 5
我想检查1 <= number <= 10
并检索一个布尔值,如果number
值包括在该范围内。如何检查一个数字是否包含在一个范围内(在一个语句中)?
我是这样做的:
number >= 1 && number <= 10
,但我想这样做,在一个声明。我怎样才能做到这一点?
我正在使用Ruby on Rails 3.0.9,我想检查一个数字是否包含在一个范围内。也就是说,如果我有一个变量number = 5
我想检查1 <= number <= 10
并检索一个布尔值,如果number
值包括在该范围内。如何检查一个数字是否包含在一个范围内(在一个语句中)?
我是这样做的:
number >= 1 && number <= 10
,但我想这样做,在一个声明。我怎样才能做到这一点?
(1..10).include?(number)
是诀窍。
顺便说一句:如果你想验证使用ActiveModel::Validations
一个数字,你甚至可以这样做:
validates_inclusion_of :number, :in => 1..10
阅读here约validates_inclusion_of
或Rails的3路:
validates :number, :inclusion => 1..10
如果我还想允许零,该怎么办?当它为零时,我收到一个错误。 – user2503775
Rails有一个选项'allow_nil'。只需添加它就像这样:',allow_nil:true' –
它是否适用于负数? –
如果它不是验证过程的一部分,您可以使用#between?
:
2.between?(1, 4)
=> true
(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
我更喜欢这种方法,因为验证文本更有意义。 – Dan
我更喜欢它,因为我已经验证了数字性。使它成为一行:) – BradGreens
@BradGreens这是一条长长的路线。 – wchargin
在Ruby 1.9的最直接的翻译似乎是Range#cover?:
返回true如果obj是乞讨和结束之间,即求< = OBJ < =结束(或者在排除结束时排除 结束排除?是真的)。
如果你想知道那是来自Range#include?
不同,那就是,如果它是在范围内的所有元素,后者迭代非数值范围。有关更详细的解释,请参阅此blog post。
轨道4
,如果你想通过它加载ActiveModel ::验证您可以使用
validates_inclusion_of :number, :in => start_number..end_number
或Rails 3的语法
validates :number, :inclusion => start_number..end_number
但简单EST方式我觉得是
number.between? start_number, end_number
也许包含一些解释。 – GMchris
窗体上精确的错误信息提交,请尝试这些
validates_numericality_of :tax_rate, greater_than_or_equal_to: 0, less_than_or_equal_to: 1, message: 'must be between 0 & 100'
由于没有什么不对您引用的语句它引出了一个问题:为什么想/需要进一步“缩短”呢? – DarkDust
@DarkDust - 尽可能少的代码! – Backo