2011-01-12 4 views
0

에 나는 문제는 expired? 때문에 전무 값의 예외를 발생되므로 @user 아직 신용 카드가없는 경우가이잡기 오류 루비

if not @user.verified? or @user.credit_card.expired? 
    # do stuff 
end 

같은 것을 보이는 문이있다.

여분의 if 문을 사용하지 않고도 인라인 오류를 잡아낼 수있는 간결한 방법이 있습니까?

+0

처음으로 null을 확인 하시겠습니까? 예 : if @ user.credit_card.exists? – zengr

+0

먼저 우선 순위가 다르기 때문에'not' 및'or' 대신'!'및'||'를 사용하십시오. . – Nakilon

+2

더 나은 점은'@ user.valid_card? '또는 다른 방법을 만들고 거기에있는 모든 것을 깔끔하게 캡슐화하십시오. – Peter

답변

1

당신이 레일을 사용하여이 예외를 방지하려면 2.3/3 내장 방법 : 코드

@user.credit_card.expired? 

가 위반이라는 것

if not @user.verified? or @user.credit_card.try(:expired?) 
    # do stuff 
end 
0

gem은 객체가 null이 아닌 경우에만 보호 된 메소드 호출을 허용합니다.

if not @user.verified? or @user.credit_card.andand.expired? 
    # do stuff 
end 

당신은 gem install andand로를 설치하고 당신은 갈 수 있어요 :

귀하의 코드는 다음과 같다.

웹 사이트 : http://andand.rubyforge.org/

0

tryLaw of Demeter. 해당 법률에 따라 @user에서 원하는 방법으로 전화 할 수 있지만 @user.credit_card은 허용되지 않는다고 명시되어 있습니다.