如果对象不存在,ruby中的简单方法忽略错误

时间:2014-10-29 15:39:59

标签: ruby-on-rails ruby

我有两个对象:Wine,Brand

Brand has_many :wines
Wine belongs_to :brand

如何简化以下代码:

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

我意识到它已经非常简单,但我的代码中有一些不同的复杂性使得这很麻烦。我想做的是:

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

它基本上忽略了错误。在PHP中你可以做到这一点,我找不到ruby的必然结果。

3 个答案:

答案 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方法,如果品牌不存在,则返回品牌namenil