如果第一个字段在Rails中为nil,则无法访问字段的字段

时间:2016-05-22 23:19:53

标签: ruby-on-rails ruby-on-rails-4 model foreign-keys

我正在使用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

如何解决此问题?

3 个答案:

答案 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>

结果

干模型,视图和控制器。

注意

如果视图中只有一个,两个方法调用,那么所有这些都是过度的。