2011-12-13 5 views
0

루비 문법에 대한 간단한 질문과 몇 가지 설명이 있습니다.Ruby on Rails는 메서드 구조를 확인합니다.

컨텍스트에는 ActiveRecord :: Base를 서브 클래 싱하는 꽤 일반적인 모델 클래스가 있으며 유효성 검사를 활용하고 있습니다.

루비 대회는 정규 표현식처럼 어려운 일이 아니라면 그 라인이 80 줄까지 올라간다면 여러 줄에 걸쳐 긴 코드 조각을 나누어서 깔끔하게 보관하는 것을 좋아한다고 생각합니다. 첫 번째 질문은 다음과 같습니다.

어떻게 유효선이 올바르게 분할되어 올바르게 작동합니까?

validates :email, :uniqueness => true, :length => {:within => 5..50}, :format => {:with => /^[^@][\w.-][email protected][\w.-]+[.][a-z]{2,4}$/i} 

내가 시도 일이 같은 :

validates(
    :email, 
    :uniqueness => true, 
    :length => {:within => 5..50}, 
    :format => {:with => /^[^@][\w.-][email protected][\w.-]+[.][a-z]{2,4}$/i} 
) 

난 당신이 백 슬래시를 사용하여 라인을 분할 할 수 어딘가에 루비 대회에서 읽고, 나는 그 모습 거라고 생각하기 때문에 나는 아직 그것을 시도하지 않은 특히 쉼표 나 피연산자가 줄 끝 부분에 있는지 확인하여 루비의 힘을 활용할 수있을 때 좀 이상합니다.

내 마지막 질문은 다음과 같습니다

는 누군가가이 곳에서 적절한 중괄호와 대괄호와 방법의 유효성을 확인 쓸 수 있을까요? 어쩌면 나는 기본적인 구문이 어디로 가는지에 대해 다소 혼란 스러울 것이다.

빠른 요점을 되풀이하다 :

어떻게 한 줄을 분할 위에서 제대로 유효성을 검사?
루비 코드 행을 백 슬래시로 나눌 수 있습니까?
누군가는 모든 중괄호와 대괄호로 작성된 동일한 방법을 씁니다.

미리 감사드립니다.

+0

백 슬래시를 사용하여 줄 끝 문자를 이스케이프 처리하는 것이 좋지 않은 것으로 간주 될 수 있습니다. 그렇지 않으면 validates 메소드가 잘된 것처럼 보입니다. 더 의미있는 일에 시간을 투자하십시오. – maprihoda

+0

괄호없이 쉼표로이 행을 분리하면 구문 오류가 발생합니다. 그렇다면 오류를 게시 할 수 있습니까? –

+0

또한 이것은 http://codereview.stackexchange.com/에서 더 잘 속할 수도 있습니다. –

답변

0

당신은 맞는 생각이 있습니다. 나는 유효성 검사 매크로를 이렇게 쓸 것입니다.

validates :email, 
    :uniqueness => true, 
    :length => {:within => 5..50}, 
    :format => {:with => /^[^@][\w.-][email protected][\w.-]+[.][a-z]{2,4}$/i} 

클래스 매크로에는 대괄호가 필요하지 않습니다. 첫 번째 줄은 :email 특성의 유효성을 분명히 나타내고 있으며, 후속 줄은 다양한 유효성 검사를 수행합니다.

예, 백 슬래시를 사용할 수는 있지만 일반적으로 불필요한 것이므로 나에게보기 흉하게 보입니다. 연산자를 끝내고 다음 줄을 들여 쓰는 것이 좋습니다. 예를 들어 http://ruby-doc.org/docs/ProgrammingRuby/html/language.html을 참조하십시오.

가능한 한 한 줄에 모든 RegExp 리터럴을 유지하는 경향이 있습니다. 너무 길면 Regexp.new 대신

+0

해시 유효성 검사의 인수는 무엇입니까? 중괄호가 포함 된 경우 중괄호로 묶는 것이 올바른 방법일까요? 아니면 모두 논쟁입니까? – Ben

+0

글쎄, validates의 인수는 해시가 아니며, 별 또는 표시입니다. 공식 API에 대해 http://api.rubyonrails.org/를 보면 유효성 검사에 메소드 유효성 검사 (* 속성)가 있음을 알 수 있습니다. 그래서 위를 보면, 당신은 두 개의 인자,': email'과 해쉬를 전달할 것입니다. –

+0

아하이 그렇습니다. 설명과 신속한 응답에 감사드립니다. – Ben