0

ショッピングカートを作成しています。

というモデルを用意しLineItemます。

カートの各インスタンスには、1 つ以上の項目があります。完了したトランザクションと同様に、「注文」になります。

したがって、理論的には、LineItem belongs_toCart とbelongs_toOrder.

しかし、DB テーブルはどのように見えるでしょうか? と私のテーブルcart_idに?order_idLineItems

これは、すべての有効なカート レコードに対して、order_idnil (または空) の があることを意味します。同様に、すべての有効な注文には空のcart_id.

これは、これを行う非Railsyの方法のようです。

これを行う最善の方法は何ですか?ポリモーフィックな関連付け?私がそれをしなければならないとしたら、それはどのように見えるでしょうか?

4

2 に答える 2

1

広告申込情報モデルは、2 つの belongs_to 関連付けを持つことができます

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

しかし、複数の異なるクラスに属する必要がある場合、これは面倒になる可能性があります。解決策は、モデルが SINGLE アソシエーションの複数のモデルに属することを可能にするポリモーフィック アソシエーションです。これは、以下の例では:line_itemableです。2 つの属性を LineItem モデルに追加line_itemable_idline_itemable_typeます。

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 に答える