Ruby on rails &引用;未定义的方法`name';对于nil:NilClass“;创建新实例时

Ruby on rails &引用;未定义的方法`name';对于nil:NilClass“;创建新实例时,ruby-on-rails,many-to-many,associations,relationship,Ruby On Rails,Many To Many,Associations,Relationship,我在rails中遇到了一个问题,我在两个模型(订单和状态)之间有一个基本的多对多关系。这些模型如下所示: class Order < ActiveRecord::Base has_many :products, :through => :lines has_and_belongs_to_many :statuses default_scope order("#{table_name}.created_at desc") end 在我看来,这一行: <td>

我在rails中遇到了一个问题,我在两个模型(订单和状态)之间有一个基本的多对多关系。这些模型如下所示:

class Order < ActiveRecord::Base
  has_many :products, :through => :lines
  has_and_belongs_to_many :statuses

  default_scope order("#{table_name}.created_at desc")
end
在我看来,这一行:

<td><%= order.statuses.last.name %></td>

谢谢大家。

一个简单的解决方案:

<td><%= order.statuses.last.name if order.statuses %></td>

如果没有最后状态或最后状态没有名称,则应小心

<td><%= order.statuses.last.try(:name) %></td>


谢谢你,马克。在这种情况下,对于我来说,结果是喜忧参半。我能够成功地做到以下几点:-但我做不到。我的猜测是,这是因为.name方法来自我的状态模型,它仍然不知道如何响应这是否为nil?我想我必须在保存之前初始化一个关系。要识别这个.name方法吗?再一次,非常感谢你,我真的很感谢你的帮助。那么一个身份可以没有名字存在吗?在这种情况下,您可能希望将其包括在您的条件中:
order.statuses.last.name如果order.statuses.last.name
那么,为了初始化
状态
您必须硬编码它或点击数据库。那么,为什么不保存然后继续呢?除非缓存状态数组并以此方式初始化订单。
<td><%= order.statuses.last.name if order.statuses %></td>
<td><%= order.statuses.last.try(:name) %></td>