Как проверить, входит ли число в диапазон (в одном утверждении)? - PullRequest
74 голосов
/ 30 июля 2011

Я использую Ruby on Rails 3.0.9, и я хотел бы проверить, входит ли число в диапазон. То есть, если у меня есть переменная number = 5, я бы хотел проверить 1 <= number <= 10 и получить логическое значение, если в этот диапазон включено значение number.

Я могу сделать это так:

number >= 1 && number <= 10

но я бы хотел сделать это в одном заявлении. Как я могу это сделать?

Ответы [ 6 ]

144 голосов
/ 30 июля 2011

(1..10).include?(number) это трюк.

Кстати: если вы хотите проверить число с помощью ActiveModel::Validations, вы можете даже сделать:

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

читать здесь о validates_inclusion_of

или Rails 3 way:

validates :number, :inclusion => 1..10
55 голосов
/ 03 июля 2012

Enumerable # включают? :

(1..10).include? n

Range # cover? :

(1..10).cover? n

Comparable # между?:

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
16 голосов
/ 30 июля 2011

Если это не часть процесса проверки, вы можете использовать #between?:

2.between?(1, 4)
=> true
4 голосов
/ 28 июля 2017

Чтобы получить точные сообщения об ошибках при отправке формы, попробуйте эти

validates_numericality_of :tax_rate, greater_than_or_equal_to: 0, less_than_or_equal_to: 1, message: 'must be between 0 & 100'
3 голосов
/ 26 мая 2016

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

2 голосов
/ 03 июля 2012

В Ruby 1.9 наиболее прямой перевод выглядит как Range # cover? :

Возвращает true, если obj находится между началом и концом, то есть нач. <= Obj <= end (или конец исключить, когда exclude_end? верно). </p>

Если вам интересно, чем это отличается от Range#include?, это то, что последний перебирает все элементы диапазона, если это не числовой диапазон. См. сообщение в блоге для более подробного объяснения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...