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