Rails STI关联和嵌套属性

时间:2017-04-11 08:46:38

标签: ruby-on-rails ruby rails-activerecord

我有如下结构:

class Order < ApplicationRecord
end

class BulkOrder < Order
  has_many :vehicles, inverse_of: :order

  accepts_nested_attributes_for :vehicles
end

class Vehicle < ApplicationRecord
  belongs_to :order, inverse_of: :vehicles
end

现在,当我尝试创建模型以及相关属性时,Rails会混淆,并且Vehicle模型会收到错误,即Order没有名为“vehicles”的关联。这是事实 - 它没有 - 但如果Rails实际上推断出订单的正确类型,它将得到一个BulkOrder,并且看到它确实具有这种关联。

顺便说一句,我不想​​将has_many协会移到Order,因为并非所有订单都有车辆。我也不想专注于belongs_to :bulk_order,因为其他订单也会有车辆(虽然不是全部)。

另一个问题是关联的属性试图在Vehicle上设置“bulk_order_id”,而不是“order_id”。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

执行此操作的唯一方法是将has_many :vehicles添加到订单。然后删除BulkOrder的内容,因为它继承自Order。

将has_many属性添加到Order并不意味着所有订单都有车辆。它只允许车辆属于订单,因为它允许每辆车都有一个order_id。如果您还没有,请将order_id添加到车辆中。 $rails g migration add_order_id_to_vehicles order_id:integer