Estoy usando Ruby on Rails 3.0.9 y me gustaría comprobar si un número está incluido en un rango. Es decir, si tengo una variablenumber = 5
me gustaría verificar 1 <= number <= 10
y recuperar un valor booleano si el number
valor está incluido en ese rango.
Puedo hacer eso así:
number >= 1 && number <= 10
pero me gustaría hacer eso en una declaración. ¿Cómo puedo hacer eso?
Respuestas:
(1..10).include?(number)
es el truco.Por cierto: si desea validar un número usando
ActiveModel::Validations
, incluso puede hacer:validates_inclusion_of :number, :in => 1..10
leer aquí sobre validates_inclusion_of
o la forma Rails 3+:
validates :number, :inclusion => 1..10
fuente
allow_nil
. Solo agrégalo así:, allow_nil: true
Enumerable # incluir? :
(1..10).include? n
¿Cobertura de rango #? :
(1..10).cover? n
Comparable # entre? :
n.between? 1, 10
Validador de numericalidad :
validates :n, numericality: {only_integer: true, greater_than_or_equal_to: 1, less_than_or_equal_to: 10}
Validador de inclusión :
validates :n, inclusion: 1..10
fuente
validates :amount, numericality: { less_than_or_equal_to: ->(m) { m.user.balance }, greater_than_or_equal_to: 0 }
Si no es parte de un proceso de validación, puede usar
#between?
:2.between?(1, 4) => true
fuente
Para obtener mensajes de error precisos en el envío de un formulario, pruebe estos
validates_numericality_of :tax_rate, greater_than_or_equal_to: 0, less_than_or_equal_to: 100, message: 'must be between 0 & 100'
fuente
Carriles 4
validates_inclusion_of :number, :in => start_number..end_number
validates :number, :inclusion => start_number..end_number
Pero la forma más sencilla que encuentro es
number.between? start_number, end_number
fuente
En Ruby 1.9, la traducción más directa parece ser Range # cover? :
En caso de que se pregunte en qué se diferencia de
Range#include?
, es que este último itera sobre todos los elementos del rango si es un rango no numérico. Consulte esta publicación de blog para obtener una explicación más detallada.fuente
Si desea verificar que un número particular existe en una matriz personalizada,
Como por ejemplo, quiero saber si 5 está incluido en la lista = [1,4,6,10] o no
list.include? 5 => false list.include? 6 => true
fuente