我有如下结构:
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”。
有什么想法吗?
答案 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