0

也许我今天的吸收有点慢(我什至无法说出正确的标题),但我想解决这个问题:

我想从我之前的问题中扩展我的模型。

简短回顾:

一个超市可以容纳许多产品,每种产品都可以在许多超市销售。该关联是通过供应模型建立的。

扩张:

现在我想扩展这个模型:假设我有一个产品Apple(水果)。它可以有不同的品种:即“Granny Smith”、“Golden Delicious”等。

超市 1我可以买

  • 苹果->“史密斯奶奶”
  • 苹果->“金冠”

超市 2我可以买

  • 苹果->“布雷本”
  • 苹果->“金冠”
  • Apple -> "McIntosh"(真的,那是一个苹果品种)。

编辑:

一个更常见的问题是不同的公司提供相同的产品:玉米片可以由Kellog'sGeneral Mills等提供,同时这些公司生产许多产品:

超市 1 出售:

  • 玉米片 -> 凯洛格的
  • 玉米片 -> 通用磨坊

超市 2 出售:

  • 玉米片 -> 凯洛格的
  • Rice Kriespies -> Kellog's

我想我需要一个额外的模型来连接品牌(上面模型中的品种)和产品(玉米片/苹果)。

/编辑

我还需要创建哪些模型以及如何将它们链接起来?我想像多态关联之类的东西,但我真的不知道......

4

1 回答 1

0

您可能希望在超市和详细产品之间建立多对多关系。详细产品将具有通用产品的外键。

假设您命名了通用产品模型属(复数:genera)。[随意找一个更好的名字。]

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

您还可以在 Product to brand 中包含一个外键,以存储 Kellog's 或 General Mills。

于 2012-09-14T16:29:23.827 回答