2016-06-26 5 views
2
루비에서

를 튜토리얼 3 판 (6.2 사용자 검증) 몇 가지 테스트를 작성하는 동안, 책은 액티브 사용자 클래스에 대한 코드가 있습니다옵션 해시 (끝 부분)는 언제 레일 4에서 허용되지 않습니까? 레일에

class User < ActiveRecord::Base 
    validates :name, presence: true, length: { maximum: 50 } 
    VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
    validates :email, presence: true, length: { maximum: 255 }, 
        format: { with: VALID_EMAIL_REGEX }, 
        uniqueness: case_sensitive: false 
end 

마지막 줄 (고유성 : CASE_SENSITIVE : 거짓을)를 던졌습니다 구문 오류.

이의 온라인 버전

는 {}을 가지고 보정 : https://www.railstutorial.org/book/modeling_users

uniqueness: { case_sensitive: false } 

에하지만 내 질문은 마지막 줄에서 오류가 발생 않습니다입니까? 마지막 해시가 항상 {}을 (를) 생략 할 수 있다고 생각 했나요? 방법에 해시를 전달할 때

uniqueness: case_sensitive: false 

그것은, 당신은 {}를 생략 할 수 있습니다

{ uniqueness: { case_sensitive: false }} 

해야 다음 문은 유효한 루비 문이 아니기 때문에

답변

2

그것은 오류가 발생합니다.

call_method(foo: "bar") 
call_method({ foo: "bar" }) 

그러나 귀하의 경우에 그것은 완전히 다른 : 당신은 키와 같은 presence, format, uniqueness을 포함하는 해시를 정의하고 있습니다. uniqueness 키의 값은 Hash이기도하지만 올바르게 정의하지는 않습니다.

1

난 당신이 해시 중괄호의 "한 수준"을 생략 할 수 있다고 생각합니다. 그래서 여기이 오른쪽

:

validates :email, presence: true, length: { maximum: 255 }, 
        format: { with: VALID_EMAIL_REGEX } 

validates 메소드의 두 번째 인수는 실제로 해시입니다. (당신이 여기처럼) 중첩 된 해시 구조가있는 경우

validates(:email, { presence: true, length: { maximum: 255 } }) 

당신은 이미 당신이 그들을 생략 할 수없는 최상위 해시에 대한 중괄호를 생략하고 : 당신은 너무처럼 시각화 할 수 있습니다 중첩 된 것.

Coffeescript에서이 작업을 수행 할 수 있습니다. (깔끔하게 찾을 수 있습니다)