0

今日は理解が少し遅いかもしれませんが(適切なキャプションを表現することさえできません)、この問題を解決したいと思います:

以前の質問からモデルを拡張したいと思います。

簡単な要約:

スーパーマーケットには多くの商品を保管でき、各商品は多くのスーパーマーケットで販売できます。関連付けは、供給モデルを介して構築されます。

拡張:

ここで、このモデルを拡張したいと思います。Apple (果物) という製品があるとします。「グラニー・スミス」、「ゴールデン・デリシャス」など、さまざまな品種があります。

スーパーマーケット 1で買えます

  • アップル -> 「グラニースミス」
  • りんご→「ゴールデンデリシャス」

スーパーマーケット 2で買えます

  • アップル -> 「ブレイバーン」
  • りんご→「ゴールデンデリシャス」
  • Apple -> "McIntosh" (実際、これはリンゴの品種です)。

編集:

より一般的な問題は、同じ製品を提供するさまざまな会社があることです。コーンフレークは、ケロッグゼネラル ミルズなどから供給され、これらの会社は同時に多くの製品を生産しています。

スーパーマーケット 1 では次の商品を販売しています。

  • コーンフレーク→ケロッグ
  • コーンフレーク -> ゼネラルミルズ

スーパーマーケット 2 では次の商品を販売しています。

  • コーンフレーク→ケロッグ
  • ライス クリスピー -> ケロッグ

ブランド(上記のモデルの品種)と製品(コーンフレーク/アップル)を接続するには、追加のモデルが必要だと思います。

/編集

追加で作成する必要があるモデルと、それらをリンクするにはどうすればよいですか? ポリモーフィックな関連付けのようなものだと思いますが、実際には手がかりがありません...

4

1 に答える 1

0

おそらく、スーパーマーケットと詳細な製品の間に多対多の関係を持ちたいと思うでしょう。詳細な製品には、一般的な製品への外部キーがあります。

一般的な製品モデルの属 (複数: 属) に名前を付けるとします。【もっといい名前を見つけてください。】

class Genus
  has_many :products
end

class Brand
  has_many :products
end

class Product
  belongs_to :genus
  belongs_to :brand
  has_many :supplies
  has_many :supermarkets, :through => :supplies
end

class Supply
  belongs_to :product
  belongs_to :supermarket
end

class Supermarket
  has_many :supplies
  has_many :products, :through => :supplies
end


Product                   Genus
Granny Smith Apple        Apple
Golden Delicious Apple    Apple
Braeburn Apple            Apple
Macintosh Apple           Apple
Kellog's Cornflakes       Cornflakes
GM Cornflakes             Cornflakes
Kellog's Rice Krispies    Rice Krispies

Kellog's または General Mills を格納するために、Product to brand に外部キーを含めることもできます。

于 2012-09-14T16:29:23.827 に答える