2013-02-21 142 views
0

country屬性的默認值爲零。我如何設置「If」語句爲零?

在國家表中,某些記錄有image_url,其餘記錄的country屬性爲零。

所以我在幫助編碼這

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

但是,它會返回錯誤時image_url是零

Something went wrong 

我該如何解決?

回答

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(未定義的方法'+'爲零:NilClass):' – HUSTEN 2013-02-21 22:08:00

+0

@HUSTEN - 很高興幫助!但是我懷疑其他錯誤是相關的(特別是因爲你從未使用過添加),所以你必須單獨追蹤它。 – 2013-02-21 22:35:29

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語句&中保存自己的額外子句,你的代碼看起來很漂亮。