Ruby - ActiveRecord belongs_to和nil association

时间:2015-05-08 12:17:31

标签: ruby-on-rails activerecord

想象一下以下情况:

我有一个用户模型和一个user_group模型,所以:

Class User <  ActiveRecord::Base
  belongs_to :user_group
end

Class UserGroup < ActiveRecord::Base
  has_many :users
end

现在,让我们说一些用户没有组。这意味着,当我打电话时:

<% @u.each do |item| %>
              <tr>
                <td><%= item.id %></td>
                <td><%= item.username %></td>
                <td><%= item.name %></td>
                <td><%= item.user_group.name %></td>
              </tr>
              <% end %>

它会抛出零。是否有任何方式将nil显示为空字符串(有点像LEFT JOIN,或者CodeIgniter中的DataMapper include_related)而不是显示错误页面?

现在我正在使用

<%= item.user_group.name unless item.user_group.nil? %>

在调用之前检查,但对所有视图文件执行此操作有点不是一个好方法。

提前致谢!

2 个答案:

答案 0 :(得分:2)

使用try ..

class Manufacturer < ActiveRecord::Base
 has_many :products
  def contact
    "Manufacturer has been contacted." 
  end 
end

Product.first.try(:manufacturer).try(:contact)
 #=> nil 
Product.last.try(:manufacturer).try(:contact) 
#=> "Manufacturer has been contacted." 

答案 1 :(得分:1)

您也可以使用帮助器:

def group_name_for(item)
 item.user_group.name unless item.user_group.nil?
end

在你的观点中调用那个助手:

<%= group_name_for(item) %>