我正在使用Rails 4.2.3。我有一个具有users
表的外键的模型。
这是我的模型的代表:
class MyObject < ActiveRecord::Base
…
belongs_to :user
end
user
模型有一个email
字段。在我看来,如何输出电子邮件字段,因为并非所有对象都会引用用户模型?我试过了
<td><%= my_object.user.email.present? %></td>
很明显,如果user
字段为nil
,则会产生此错误:
未定义的方法`email'代表nil:NilClass
如何解决此问题?
答案 0 :(得分:0)
您可以使用零检查来完成此任务:
<td><%= my_object.user ? my_object.user.email : "No user assigned" %></td>
这将在尝试访问电子邮件字段之前检查用户是否存在。
答案 1 :(得分:0)
您可以使用:
<td>
<%= my_object.try(:user).try(:email).present? %>
</td>
答案 2 :(得分:0)
我建议使用演示者。 只需创建一个简单的Ruby对象,它将在视图中显示您的对象。
class MyObjectPresenter
attr_reader :my_object
delegate :user, to: :my_object
def initialize(my_object)
@my_object = my_object
end
def user_email
user.try(:email) if user
end
end
def action
@my_object = MyObjectPresenter.new(my_object)
end
<td><%= @my_object.user_email %></td>
干模型,视图和控制器。
如果视图中只有一个,两个方法调用,那么所有这些都是过度的。