2011-07-30 36 views
61

我正在使用Ruby on Rails 3.0.9,我想檢查一個數字是否包含在一個範圍內。也就是說,如果我有一個變量number = 5我想檢查1 <= number <= 10並檢索一個布爾值,如果number值包括在該範圍內。如何檢查一個數字是否包含在一個範圍內(在一個語句中)?

我是這樣做的:

number >= 1 && number <= 10 

,但我想這樣做,在一個聲明。我怎樣才能做到這一點?

+0

由於沒有什麼不對您引用的語句它引出了一個問題:爲什麼想/需要進一步「縮短」呢? – DarkDust

+1

@DarkDust - 儘可能少的代碼! – Backo

回答

128

(1..10).include?(number)是訣竅。

順便說一句:如果你想驗證使用ActiveModel::Validations一個數字,你甚至可以這樣做:

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

閱讀here約validates_inclusion_of

或Rails的3路:

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

如果我還想允許零,該怎麼辦?當它爲零時,我收到一個錯誤。 – user2503775

+4

Rails有一個選項'allow_nil'。只需添加它就像這樣:',allow_nil:true' –

+0

它是否適用於負數? –

13

如果它不是驗證過程的一部分,您可以使用#between?

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

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 
+1

我更喜歡這種方法,因爲驗證文本更有意義。 – Dan

+0

我更喜歡它,因爲我已經驗證了數字性。使它成爲一行:) – BradGreens

+0

@BradGreens這是一條長長的路線。 – wchargin

2

在Ruby 1.9的最直接的翻譯似乎是Range#cover?

返回true如果obj是乞討和結束之間,即求< = OBJ < =結束(或者在排除結束時排除 結束排除?是真的)。

如果你想知道那是來自Range#include?不同,那就是,如果它是在範圍內的所有元素,後者迭代非數值範圍。有關更詳細的解釋,請參閱此blog post

2

軌道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

+0

也許包含一些解釋。 – GMchris

2

窗體上精確的錯誤信息提交,請嘗試這些

validates_numericality_of :tax_rate, greater_than_or_equal_to: 0, less_than_or_equal_to: 1, message: 'must be between 0 & 100' 
相關問題