【问题标题】:Many-to-Many-Relationship maybe needs polymorphic associations? Help needed for model creation多对多关系可能需要多态关联?模型创建所需的帮助
【发布时间】:2014-09-08 01:42:54
【问题描述】:

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

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

简短回顾:

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

扩展:

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

超市1我可以买到

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

超市2我可以买到

  • 苹果 -> “Braeburn”
  • 苹果 -> “金冠”
  • Apple -> “McIntosh”(真的,那是apple cultivar)。

编辑:

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

超市 1 销售:

  • 玉米片 -> 家乐氏
  • 玉米片 -> 通用磨坊

超市2卖:

  • 玉米片 -> 家乐氏
  • Rice Kriespies -> Kellog's

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

/编辑

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

【问题讨论】:

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


    【解决方案1】:

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

    假设您命名了通用产品模型属(复数: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。

    【讨论】:

    • 这个模型似乎解决了第一个问题 - 编辑了问题,因为要解决的问题更复杂
    • 编辑解决第二个问题。
    • 我不知道这是否解决了我的问题 - 也许苹果示例有点分散注意力。或许我应该说,主要的问题是把超市产品(如果你愿意的话也可以是属)品牌...我必须创建我的模型吗?
    • 简单说明一下:我想我需要一个额外的模型(称为super_attributionsupermarket_idproduct_idbrand_id。但是它们如何属于一起(belongs_to、@987654327 @ 和 has_many, :through,我不明白...
    • “主要问题是连接超市、产品(或属,如果你愿意的话)和品牌”在我看来,你应该将超市与产品的最详细版本连接起来,将产品连接到一个不太详细的类型,并将产品与品牌联系起来。我将编辑我的答案以包含其余模型。
    猜你喜欢
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多