想象一下以下情况:
我有一个用户模型和一个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? %>
在调用之前检查,但对所有视图文件执行此操作有点不是一个好方法。
提前致谢!
答案 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) %>