代码之家  ›  专栏  ›  技术社区  ›  c_ern

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

  •  0
  • c_ern  · 技术社区  · 12 年前

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

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

    简要回顾:

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

    扩展:

    现在我想扩展此模型: 假设我有一个产品 苹果 (水果)。它可以有不同的品种:如“史密斯奶奶”、“黄金美味”等。

    在里面 超市1 我可以买

    • 苹果->“史密斯奶奶”
    • 苹果->“黄金美味”

    在里面 超市2 我可以买

    • 苹果->“Braeburn”
    • 苹果->“黄金美味”
    • 苹果->“麦金托什”(真的,那是一个 apple cultivar )。

    编辑:

    一个更常见的问题是让不同的公司提供相同的产品: 玉米片 可由提供 凯洛格氏 通用磨坊公司 等等,同时这些公司生产许多产品:

    超市1销售:

    • 玉米片->凯洛格氏
    • 玉米片->通用磨坊公司

    超市2销售:

    • 玉米片->凯洛格氏
    • 米脆饼->凯洛格氏

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

    /编辑

    我还需要创建哪些模型,以及如何将它们连接起来?我想是多态联想,但我真的不知道。。。

    1 回复  |  直到 4 年前
        1
  •  0
  •   Marlin Pierce    12 年前

    你可能想在超市和详细的产品之间建立多对多的关系。详细的产品将具有一般产品的外键。

    假设您命名通用产品模型属(复数:属)。[请随意查找更好的名称。]

    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
    

    你还可以在“产品到品牌”、“凯洛格商店”或“通用磨坊”中加入一把外国钥匙。