我有下一个模型:文章,公告,目录和媒体。
对于每个模型的项目,我需要创建一个子类别和一个类别。我计划创建一个包含两列的关系表:parend_id
和child_id
,以及包含category_id
的每个模型的列。
我应该创建多少关系模型?
答案 0 :(得分:0)
无需创建关系模型,只需使用belongs_to
关系
因为你说跟随我认为belongs_to关系应该这样做
对于每个模型的项目,我需要创建子类别和类别。
只需在表格中添加subcategory_id
和category_id
:文章,公告,目录和媒体,并建立has_many
belongs_to
关系
编辑但是如果你坚持使用关系模型,那么我建议为每个模型使用一个关系模型。
最后编辑:我真的认为你应该使用belongs_to,has_many relation
Class Article < ActiveRecord::Base
belongs_to :category
belongs_to :subcategory
end
class Category < ActiveRecord::Base
has_many :articles
# the same relation(has_many) will be for Announcements, Catalogs and Media
has_many :subcategories
end
class Subcategory < ActiveRecord::Base
has_many :articles
belongs_to :category
end
通过这种方式,您可以使用category.subcategories.articles
如果category
只有一个Subcategory
,则将它们之间的关系更改为has_one
,语法将变为category.subcategory.articles
答案 1 :(得分:0)
我个人会在单个连接表中使用has_many :through
关系与多态关联:
#app/models/article.rb
Class Article < ActiveRecord::Base
has_many :categorizable_categories
has_many :categories, through: :categorizable_categories
end
class Article < ActiveRecord::Base
has_many :tags, as: :taggable,dependent: :destroy
has_many :categories, through: :tags
end
class Category < ActiveRecord::Base
has_many :tags, dependent: :destroy
has_many :articles, through: :tags, source: :taggable, source_type: 'Article'
end
class Tag < ActiveRecord::Base
belongs_to :taggable, polymorphic: true
belongs_to :category
end
这样您就可以使用@article.categories
实现父母与父母的关系子类别,我建议使用像Ancestry gem这样的东西 - 你在连接表中设置一个祖先列 - 基本上允许你直接在模型的类别之间建立关系