Ruby on Rails 3.0.9を使用しており、数値が範囲に含まれているかどうかを確認したい。つまり、変数がある場合number = 5
確認したい1 <= number <= 10
およびnumber
値がその範囲に含まれる場合、ブール値を取得します。
私はこれを次のように行うことができます:
number >= 1 && number <= 10
しかし、私は1つのステートメントでそれをしたいと思います。どうやってやるの?
(1..10).include?(number)
はトリックです。
Btw:ActiveModel::Validations
を使用して数値を検証する場合は、次のこともできます。
validates_inclusion_of :number, :in => 1..10
読み取り ここ validates_inclusion_ofについて
またはRails 3つの方法:
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
検証プロセスの一部ではない場合は、#between?
:
2.between?(1, 4)
=> true
フォーム送信の正確なエラーメッセージについては、これらを試してください
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
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
Ruby 1.9で最も直接的な翻訳は Range#cover? :
Objがbegとendの間にある場合、つまり、beg <= obj <= end(またはexclude_end?がtrueの場合はend Exclusive)の場合、trueを返します。
それがRange#include?
、非数値範囲の場合、後者は範囲のすべての要素を反復処理します。詳細な説明については、こちらをご覧ください ブログ投稿 .
特定の番号がカスタム配列に存在することを確認する場合は、
たとえば、list = [1,4,6,10]に5が含まれているかどうかを知りたい
list.include? 5 => false
list.include? 6 => true