0

我正在创建一个购物车。

所以我会有一个模型叫做LineItem.

每个购物车实例将有 1 个以上的订单项。完成的交易也将成为“订单”。

所以,理论上,一个 LineItem belongs_toCart 和belongs_toOrder。

但是,数据库表会是什么样子?在我的cart_id桌子上?order_idLineItems

这意味着对于每个有效的购物车记录,都会有一个order_idnil(或空)。同样,对于每个有效订单,都会有一个空的cart_id

这似乎是一种非 Railsy 方式来做到这一点。

做这个的最好方式是什么?多态关联?如果我应该这样做,那会是什么样子?

4

2 回答 2

1

订单项模型可以有两个 belongs_to 关联

class LineItem < ActiveRecord::Base
    belongs_to :cart
    belongs_to :order
end

但是如果它需要属于几个不同的类,这可能会变得混乱。解决方案是多态关联,它允许模型在单个关联上属于多个模型,在下面的示例中是:line_itemable. 它将添加两个属性,line_itemable_id并添加line_itemable_type到 LineItem 模型。

class LineItem < ActiveRecord::Base
    belongs_to :line_itemable, :polymorphic => true
end

class Order < ActiveRecord::Base
    has_many :line_items, :as => :line_itemable
end

class Cart < ActiveRecord::Base
    has_many :line_items, :as => :line_itemable
end

如果购物车和订单具有相似的属性(例如成本),那么另一种选择是消除订单类并简单地:paid在购物车上添加一个标志。

于 2013-06-17T18:33:51.727 回答
0

我建议多态关联。

class LineItem < ActiveRecord::Base
  belongs_to :owner, :polymorphic => true
end



class Order < ActiveRecord::Base
  has_many :line_items, :as => :owner
end



class Cart < ActiveRecord::Base
  has_many :line_items, :as => :owner
end

您需要将 owner_type 和 owner_id 添加到 line_items 表。

参考这个

于 2013-06-17T18:31:43.120 回答