【发布时间】:2014-03-15 11:35:33
【问题描述】:
我有下一个模型:文章、公告、目录和媒体。
对于每个模型的项目,我需要创建一个子类别和一个类别。我将计划创建一个包含两列的关系表:parend_id 和child_id,并为每个模型创建一个列category_id。
我应该创建多少个关系模型?
- 一个为所有?
- 或者每个模型一个关系模型?
【问题讨论】:
标签: ruby-on-rails
我有下一个模型:文章、公告、目录和媒体。
对于每个模型的项目,我需要创建一个子类别和一个类别。我将计划创建一个包含两列的关系表:parend_id 和child_id,并为每个模型创建一个列category_id。
我应该创建多少个关系模型?
【问题讨论】:
标签: ruby-on-rails
无需创建关系模型,只需使用belongs_to 关系
因为你说跟随我猜belongs_to关系应该这样做
为我需要的每个模型的项目创建子类别和类别。
所以只需在您的表格中添加subcategory_id 和category_id:文章、公告、目录和媒体并建立has_many belongs_to 关系
编辑但如果你坚持使用关系模型,那么我建议为每个模型使用一个关系模型。
最后编辑:我真的认为你应该使用belongs_to,has_many 关系
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
【讨论】:
catecory.subcategory.articles 请求
subcategory 和一个category 对吗?
我个人会在单个连接表中使用带有多态关联的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 之类的东西 - 你会在连接表中设置一个祖先列 - 基本上允许你直接在模型的类别之间创建关系
【讨论】: