如果我有一个嵌套类别,其中每个类别可能有许多子类别,并且每个类别属于一个父类别,我将如何编写类别模型?
我认为它会是这样的:
Category
belongs_to :category
has_many :categories
我parent_category_id
在类别表中的位置,这是一个很好的关系吗?还是我需要第二张表来呈现多对多关系?我想我需要像 belongs_to_and_has_many 这样的东西?
任何指导将不胜感激
如果我有一个嵌套类别,其中每个类别可能有许多子类别,并且每个类别属于一个父类别,我将如何编写类别模型?
我认为它会是这样的:
Category
belongs_to :category
has_many :categories
我parent_category_id
在类别表中的位置,这是一个很好的关系吗?还是我需要第二张表来呈现多对多关系?我想我需要像 belongs_to_and_has_many 这样的东西?
任何指导将不胜感激
这与 的示例完全相同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, ...
虽然迈克尔杜兰特的回答确实是正确的,但foreign_key
可以在belongs_to
电话中推断出来。这同样适用于class
inhas_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
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
并且不需要或不适合映射这种结构的第二个表。