Ruby on Rails:设置属于两个父母的模型(其中一个也可以是祖父母)

时间:2013-11-18 02:26:37

标签: ruby-on-rails database database-design ruby-on-rails-4

我正在尝试使用3个模型设置Rails 4,但我不确定如何使其工作。

品牌:

has_many    :collections
has_many    :items

收集:

belongs_to  :brand
has_many    :items

档案:

belongs_to  :collection
belongs_to  :brand

商品必须属于品牌。

商品只能属于同一品牌的商品。

如何设置模型和数据库以使其工作?

我考虑过为此做一个多态关联,但这不会破坏收藏和品牌之间的关系吗?或者这可以通过联系表以某种方式完成吗?

这是我对这段关系的可怕描述:

enter image description here

1 个答案:

答案 0 :(得分:1)

根据您的修改,我认为最好使用Polymorphic Association。也许是这样的:

# app/models/brand.rb
class Brand < ActiveRecord::Base
  has_many :collections
  has_many :items, as: :itemparent
end

# app/models/collection.rb
class Collection < ActiveRecord::Base
  belongs_to :brand
  has_many :items, as: :itemparent
end

# app/models/collection.rb
class Item < ActiveRecord::Base
  belongs_to :itemparent, polymorphic: true
end

项目表迁移如下所示:

class CreateItmes < ActiveRecord::Migration
  def change
    create_table :items do |t|
      t.string  :name
      t.integer :itemparent_id
      t.string  :itemparent_type
      t.timestamps
    end
  end
end

这样,您可以保留BrandCollection之间的明确关联,同时让Item能够拥有任何类型的父级。