숫자가 범위 (하나의 문)에 포함되어 있는지 확인하는 방법은 무엇입니까?


85

Ruby on Rails 3.0.9를 사용하고 있으며 범위에 숫자가 포함되어 있는지 확인하고 싶습니다. 즉, 변수가있는 경우 값이 해당 범위에 포함되어 있으면 부울 값 number = 5을 확인 1 <= number <= 10하고 검색하고 싶습니다 number.

다음과 같이 할 수 있습니다.

number >= 1 && number <= 10

하지만 저는 한 문장으로하고 싶습니다. 어떻게 할 수 있습니까?


인용 된 진술에 문제가 없기 때문에 질문을 던집니다. 왜 더 "단축"해야합니까?
DarkDust

1
@DarkDust-가능한 한 적은 코드!
Backo 2011

답변:


161

(1..10).include?(number) 트릭입니다.

Btw :을 사용하여 번호를 확인 ActiveModel::Validations하려면 다음을 수행 할 수도 있습니다.

validates_inclusion_of :number, :in => 1..10

validates_inclusion_of에 대해 여기에서 읽으 십시오.

또는 Rails 3+ 방식 :

validates :number, :inclusion => 1..10

nil도 허용하려면 어떻게해야합니까? 0 일 때 오류가 발생합니다.
user2503775

5
Rails에는 옵션이 allow_nil있습니다. 다음과 같이 추가하면됩니다., allow_nil: true
Mario Uher 2014 년

64

Enumerable # include? :

(1..10).include? n

Range # cover? :

(1..10).cover? n

비교 가능 #between? :

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

1
유효성 검사 텍스트가 더 의미가 있기 때문에이 방법이 더 좋습니다.
Dan

나는 이미 검증 수치이기 때문에 더 좋습니다. 한 줄로 만듭니다. :)
BradGreens 2013-09-12

@BradGreens는 하나의 긴 줄입니다.
wchargin

1
특정 논리 또는 연결에 대한 액세스가 필요한 경우 proc을 사용할 수 있습니다. 예를 들어validates :amount, numericality: { less_than_or_equal_to: ->(m) { m.user.balance }, greater_than_or_equal_to: 0 }
Евгений Масленков

16

유효성 검사 프로세스의 일부가 아닌 경우 다음을 사용할 수 있습니다 #between?.

2.between?(1, 4)
=> true

6

양식 제출에 대한 정확한 오류 메시지를 보려면 다음을 시도하십시오.

validates_numericality_of :tax_rate, greater_than_or_equal_to: 0, less_than_or_equal_to: 100, message: 'must be between 0 & 100'

3

레일스 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


아마도 몇 가지 설명을 포함 할 것입니다.
GMchris

2

Ruby 1.9에서 가장 직접적인 번역은 Range # cover? :

obj가 beg와 end 사이에 있으면 true를 반환합니다. 즉, beg <= obj <= end (또는 exclude_end?가 true 일 때 end exclusive)를 반환합니다.

그것이과 다른 점이 궁금 Range#include?하다면 후자가 숫자가 아닌 범위이면 범위의 모든 요소를 ​​반복한다는 것입니다. 자세한 설명 은이 블로그 게시물 을 참조하십시오 .


1

사용자 지정 배열에 특정 번호가 있는지 확인하려면

예를 들어 5가 list = [1,4,6,10]에 포함되어 있는지 여부를 알고 싶습니다.

list.include? 5 => false
list.include? 6 => true
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.