Rails - 当一行返回nil时

时间:2013-04-26 18:21:26

标签: ruby-on-rails methods null

我在加载具有模型用户且其中没有记录的视图时出现此错误。如果没有记录,我只是希望它在视图中返回“未分配”。否则,显示用户的名字和姓氏。当记录存在时,显示用户名和姓氏按预期工作。

我已经搞砸了许多不同的组合,无法让它发挥作用。

错误:

undefined method `full_name' for nil:NilClass

tickets.index.html.erb

<% @tickets.each do |ticket| %>
  <%= ticket.user.full_name %>
<% end %>

ticket.rb 模型

def full_name
  if full_name.blank?
    full_name = "Unassigned"
  else
    ticket.user.first_name + ' ' + ticket.user.last_name    
  end
end

1 个答案:

答案 0 :(得分:3)

问题是当你致电ticket.user时可能是零,所以你不能打电话给它。你有一个正确的想法,在你的Ticket模型上制作一个方法来隔离它,但它正在调用自己将获得无限循环,而且你仍然在你的用户而不是你的票上调用该方法。试试这个:

在您看来:

<% @tickets.each do |ticket| %>
  <%= ticket.full_name %>
<% end %>

在您的票证模型中:

def full_name
  if user.nil?
    return "Unassigned"
  else
    return user.full_name
  end
end

在您的用户模型中:

def full_name
  return "#{first_name} #{last_name}"
end

我让用户模型有了自己的方法,因此它被进一步隔离(遵循OO实践)。