2013-02-21 3 views
0

country 속성의 기본값은 nil입니다."If"문을 nil로 설정하려면 어떻게해야합니까?

국가 테이블에서 일부 레코드는 image_url이고 나머지 레코드의 country 특성은 nil입니다.

그래서 나는 image_url 내가 어떻게 해결할 수 전무

Something went wrong 

때이 오류를 반환,

def image(user) 
    if user.country.image_url 
     image_tag "flags/#{user.country.image_url}.png" 
    end 
end 

그러나 도우미이 코딩?

답변

3

두 개의 조건이 있어야합니다. 사용자는 국가가 있어야하며 해당 국가는 image_url이 있어야합니다. 그래야만 보여줄 것이 있습니다. 다행히, 그것은 간단한 비틀기는 다음과 같습니다

def image(user) 
    if(user.country && user.country.image_url) 
     image_tag "flags/#{user.country.image_url}.png" 
    end 
end 

당신이 편집증 환자 인 경우에, 당신은 usernil 중 하나가 아닌지 확인해야한다.

희망 하시겠습니까?

+0

고마워요! 여전히이 오류'ActionView :: Template :: Error (nil : NilClass에 대해 정의되지 않은 메소드'+ ')를 반환합니다. : – HUSTEN

+0

@HUSTEN - 도움이 된 것을 기쁘게합니다! 하지만 다른 오류가 관련되어 있는지 의심 스럽습니다. 특히 여기서는 추가 정보를 사용하지 않았으므로 특히주의해야합니다. 따라서 별도로 추적해야합니다. –

3

메서드 체인을 사용하는 것이 효과적이지만 코드가 훨씬 더 깨끗하게 보이고 일부 메서드 위임을 구현하면 코드가 덜 결합됩니다. 귀하의 사용자 모델의 내부

는 :

class User < ActiveRecord::Base 

    belongs_to :country 

    delegate :image_url, :to => :country, :prefix => true, :allow_nil => true  

end 

지금 도우미 간단하게 :

def image(user) 
    if user.country_image_url 
     image_tag "flags/#{user.country_image_url}.png" 
    end 
end 

Law of Demeter 상태 :

각 단위가 다른 단위에 대한 제한된 지식을 가지고 있어야 : 현재 유닛과 밀접한 관련이있는 유닛 만.

Rail Best Practices Law of Demeter도 확인하십시오. if 문에 여분의 절을 저장하는 것이 아무것도 없다면 & 코드가 꽤 멋지게 보입니다.

관련 문제