多对多关系可能需要多态关联?模型创建所需的帮助

时间:2012-09-14 15:39:10

标签: ruby-on-rails database-design many-to-many polymorphic-associations

也许我今天的吸收有点慢(我甚至不能说出一个合适的标题),但我想解决这个问题:

我想从my previous question扩展我的模型。

简短回顾:

超市可以容纳许多产品,每种产品都可以在许多超市销售。该关联是通过Supply-model构建的。

扩展:

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

超市1 我可以买

  • Apple - > “格兰尼史密斯”
  • Apple - > “金冠”

超市2 我可以买

  • Apple - > “Braeburn”
  • Apple - > “金冠”
  • Apple - > “麦金托什”(真的,那是一个apple cultivar)。

编辑:

更常见的问题是让不同的公司提供相同的产品: Cornflakes 可由 Kellog的 General Mills 提供在这些公司生产许多产品的同时:

超市1销售:

  • 玉米片 - >凯洛格的
  • 玉米片 - >将军米尔斯

超市2销售:

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

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

/修改

我还需要创建哪些模型以及如何将其链接起来?我想像多态关联,但我真的没有线索...

1 个答案:

答案 0 :(得分: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

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