Estou usando Ruby on Rails 3.0.9 e gostaria de verificar se um número está incluído em um intervalo. Ou seja, se eu tiver uma variável number = 5
, gostaria de verificar 1 <= number <= 10
e recuperar um valor booleano se o number
valor estiver incluído nesse intervalo.
Eu posso fazer isso assim:
number >= 1 && number <= 10
mas eu gostaria de fazer isso em uma declaração. Como eu posso fazer isso?
Respostas:
(1..10).include?(number)
é o truque.A propósito: se quiser validar um número usando
ActiveModel::Validations
, você pode até fazer:validates_inclusion_of :number, :in => 1..10
leia aqui sobre validates_inclusion_of
ou a maneira Rails 3+:
validates :number, :inclusion => 1..10
fonte
allow_nil
. Basta adicioná-lo assim:, allow_nil: true
Enumeráveis # incluem? :
(1..10).include? n
Faixa # cobertura? :
(1..10).cover? n
# Comparável entre? :
n.between? 1, 10
Validador de numericalidade :
validates :n, numericality: {only_integer: true, greater_than_or_equal_to: 1, less_than_or_equal_to: 10}
Validador de inclusão :
validates :n, inclusion: 1..10
fonte
validates :amount, numericality: { less_than_or_equal_to: ->(m) { m.user.balance }, greater_than_or_equal_to: 0 }
Se não fizer parte de um processo de validação, você pode usar
#between?
:2.between?(1, 4) => true
fonte
Para obter mensagens de erro precisas em um envio de formulário, tente estes
validates_numericality_of :tax_rate, greater_than_or_equal_to: 0, less_than_or_equal_to: 100, message: 'must be between 0 & 100'
fonte
Rails 4
validates_inclusion_of :number, :in => start_number..end_number
validates :number, :inclusion => start_number..end_number
Mas a maneira mais simples que encontro é
number.between? start_number, end_number
fonte
Em Ruby 1.9, a tradução mais direta parece ser Range # cover? :
Caso você esteja se perguntando como isso é diferente de
Range#include?
, é que o último itera sobre todos os elementos do intervalo, se for um intervalo não numérico. Veja esta postagem do blog para uma explicação mais detalhada.fonte
Se você quiser verificar se existe um determinado número na matriz personalizada,
Por exemplo, quero saber se 5 está incluído na lista = [1,4,6,10] ou não
list.include? 5 => false list.include? 6 => true
fonte