如果我有嵌套类别,每个类别可能有多个子类别,并且每个类别属于一个父类别,我将如何编写类别模型?
我认为会是这样的:
Category
belongs_to :category
has_many :categories
我在类别表中有parent_category_id
,这是一个很好的关系吗?或者我需要第二张桌子才能呈现出多对多的关系?我想我需要像belongs_to_and_has_many这样的东西?
任何指导将不胜感激
答案 0 :(得分:2)
这与acts_as_tree
的示例完全相同。
查看https://github.com/amerine/acts_as_tree
您需要的只是parent_id
列,您可以说;
class Category
include ActsAsTree
acts_as_tree :order => "name"
end
然后您可以访问以下内容;
category.parent # your parent
category.children # all the categories you are parent of
category.root # the parent of any parents (or yourself)
category.ancestor # your parent, grandparent, ...
答案 1 :(得分:2)
虽然Michael Durrant的答案确实是正确的,但foreign_key
可以在belongs_to
电话中推断出class
。这同样适用于has_many
来电中的class Category < ActiveRecord::Base
belongs_to :parent, class_name: 'Category'
has_many :categories, foreign_key: :parent_id
# Uses `parent_id` for the association
end
。
因此,更为简洁的迈克尔·达兰特的答案:
{{1}}
答案 2 :(得分:1)
class Category < ActiveRecord::Base
belongs_to :parent, :foreign_key => "parent_id", :class => "Category"
has_many :categories, :foreign_key => "parent_id", :class => "Category"
# Uses parent_id for the association.
has_and_belongs_to_many
和第二个表不需要或不适合映射这种结构。