2014-10-29 47 views
0

我有兩個對象:葡萄酒,品牌簡單的方法來忽略錯誤,如果對象不存在

Brand has_many :wines 
Wine belongs_to :brand 

我怎麼能簡化下面的代碼:

<%= @wine.brand.name if @wine.brand %> 

我意識到它已經非常簡單,但是在我的代碼中有一些不同的複雜性,這使得這種繁瑣。我想要做的事情是:

<%= &@wine.brand.name %> 

它基本上忽略了錯誤。在PHP中,你可以做到這一點,我只是找不到寶石的必然結果。

回答

1

您可以使用try方法:

<%= @wine.brand.try(:name) %> 
0

我寧願這樣做如下:

class Wine 
    def brand_name 
    brand.present? ? brand.name : '' 
    end 
end 

這樣可以使你的看法稍微乾淨:

<%= @wine.brand_name %> 
0

您可以使用delegate

class Wine < ActiveRecord::Base 
    belongs_to :brand 
    delegate :name, to: :brand, prefix: true, allow_nil: true 
end 

這會創建一個Wine#brand_name方法,如果品牌不存在,則返回品牌的namenil

相關問題