创建新实例时,“未定义的方法`名称为nil:NilClass”

时间:2010-11-22 16:54:05

标签: 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

class Status < ActiveRecord::Base
  has_and_belongs_to_many :orders

end

在我的订单索引视图中,我显示订单的最新状态,所以order.statuses.last.name,但是,当我创建新订单时,我收到错误。此错误用于未定义的方法名称,因为新订单在首次创建时没有任何关系。

我的问题是,在保存新订单之前,有没有办法初始化我的两个模型之间的关系?我希望我的订单始终至少在我的状态集合中具有第一个状态,但不希望在保存之前必须手动检查它。

好措施的错误是:

undefined method `name' for nil:NilClass

我认为这一行:

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

谢谢大家。

2 个答案:

答案 0 :(得分:1)

一个简单的解决方法:

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

答案 1 :(得分:0)

如果没有上次状态或最后一个状态没有名称

,则应注意这一点
<td><%= order.statuses.last.try(:name) %></td>