简体   繁体   中英

Simple way in ruby to ignore error if object doesn't exist

I have two objects: Wine, Brand

Brand has_many :wines
Wine belongs_to :brand

How can I simplify the following code:

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

I realize it's already very simple, but I have some different complexities in my code that make this cumbersome. What I'd like to do is something along the lines of:

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

Where it basically ignores the error. In PHP you can do this, I just can't find a corollary for ruby.

您可以使用try方法:

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

I'd rather do this as follows:

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

This keeps your view slightly cleaner:

<%= @wine.brand_name %>

You can use delegate :

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

This creates a Wine#brand_name method, returning either the brand's name or nil if brand does not exist.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM