Ruby on Rails 3.0.9を使用していますが、範囲に数値が含まれているかどうかを確認したいと思います。つまり、変数がある場合、値がその範囲に含まれているかどうかnumber = 5
を確認1 <= number <= 10
してブール値を取得したいと思いnumber
ます。
私はこのようにそれを行うことができます:
number >= 1 && number <= 10
しかし、私はそれを1つのステートメントで行いたいと思います。どうやってやるの?
Ruby on Rails 3.0.9を使用していますが、範囲に数値が含まれているかどうかを確認したいと思います。つまり、変数がある場合、値がその範囲に含まれているかどうかnumber = 5
を確認1 <= number <= 10
してブール値を取得したいと思いnumber
ます。
私はこのようにそれを行うことができます:
number >= 1 && number <= 10
しかし、私はそれを1つのステートメントで行いたいと思います。どうやってやるの?
回答:
allow_nil
。:ちょうどそのようにそれを追加, allow_nil: 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
validates :amount, numericality: { less_than_or_equal_to: ->(m) { m.user.balance }, greater_than_or_equal_to: 0 }
Rails 4
ActiveModel :: Validationsを介して必要な場合は、使用できます
validates_inclusion_of :number, :in => start_number..end_number
またはRails3構文
validates :number, :inclusion => start_number..end_number
しかし、私が見つける最も簡単な方法は
number.between? start_number, end_number
Ruby 1.9では、最も直接的な翻訳はRange#coverのようです。:
objがbegとendの間にある場合、つまりbeg <= obj <= endの場合(またはexclude_end?がtrueの場合はend Exclusive)、trueを返します。
それがどう違うのか疑問に思ったら Range#include?
が、数値以外の範囲の場合、後者は範囲のすべての要素を反復処理します。詳細な説明については、このブログ投稿を参照してください。
カスタム配列に特定の番号が存在することを確認したい場合は、
たとえば、5がlist = [1,4,6,10]に含まれているかどうかを知りたいです。
list.include? 5 => false
list.include? 6 => true