【发布时间】:2010-11-22 16:54:05
【问题描述】:
我在 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>
谢谢大家。
【问题讨论】:
-
好吧,为了初始化
statuses,您要么必须对其进行硬编码,要么访问数据库。那么为什么不直接保存然后继续呢?除非您缓存状态数组并以这种方式初始化您的订单。
标签: ruby-on-rails many-to-many associations relationship