J'utilise Ruby on Rails 3.0.9 et je voudrais vérifier si un nombre est inclus dans une plage. Autrement dit, si j'ai une variable number = 5
Je voudrais vérifier 1 <= number <= 10
et récupérer une valeur booléenne si la valeur number
est incluse dans cette plage.
Je peux faire ça comme ça:
number >= 1 && number <= 10
mais je voudrais le faire dans une déclaration. Comment puis je faire ça?
(1..10).include?(number)
est l'astuce.
Btw: Si vous souhaitez valider un nombre à l'aide de ActiveModel::Validations
, vous pouvez même faire:
validates_inclusion_of :number, :in => 1..10
lire ici sur validates_inclusion_of
ou le Rails 3 voies:
validates :number, :inclusion => 1..10
(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
Si cela ne fait pas partie d'un processus de validation, vous pouvez utiliser #between?
:
2.between?(1, 4)
=> true
Pour des messages d'erreur précis sur un formulaire soumis, essayez ces
validates_numericality_of :tax_rate, greater_than_or_equal_to: 0, less_than_or_equal_to: 1, message: 'must be between 0 & 100'
Rails 4
si vous le souhaitez via ActiveModel :: Validations, vous pouvez utiliser
validates_inclusion_of :number, :in => start_number..end_number
ou la syntaxe Rails 3
validates :number, :inclusion => start_number..end_number
Mais la façon la plus simple que je trouve est
number.between? start_number, end_number
Dans Ruby 1.9 la traduction la plus directe semble être Range # cover? :
Renvoie true si obj se situe entre le début et la fin, c'est-à-dire beg <= obj <= end (ou end exclusif lorsque exclude_end? Est vrai).
Si vous vous demandez en quoi c'est différent de Range#include?
, c'est que ce dernier itère sur tous les éléments de la plage s'il s'agit d'une plage non numérique. Voir ceci article de blog pour une explication plus détaillée.
Si vous souhaitez vérifier qu'un nombre particulier existe dans un tableau personnalisé,
Comme par exemple, je veux savoir si 5 est inclus dans la liste = [1,4,6,10] ou non
list.include? 5 => false
list.include? 6 => true