我有两个对象:Wine,Brand
Brand has_many :wines
Wine belongs_to :brand
如何简化以下代码:
<%= @wine.brand.name if @wine.brand %>
我意识到它已经非常简单,但我的代码中有一些不同的复杂性使得这很麻烦。我想做的是:
<%= &@wine.brand.name %>
它基本上忽略了错误。在PHP中你可以做到这一点,我找不到ruby的必然结果。
答案 0 :(得分:1)
您可以使用try
方法:
<%= @wine.brand.try(:name) %>
答案 1 :(得分:0)
我宁愿这样做:
class Wine
def brand_name
brand.present? ? brand.name : ''
end
end
这会让您的视野更加清晰:
<%= @wine.brand_name %>
答案 2 :(得分:0)
您可以使用delegate
:
class Wine < ActiveRecord::Base
belongs_to :brand
delegate :name, to: :brand, prefix: true, allow_nil: true
end
这会创建Wine#brand_name
方法,如果品牌不存在,则返回品牌name
或nil
。