2

如果我有一个嵌套类别,其中每个类别可能有许多子类别,并且每个类别属于一个父类别,我将如何编写类别模型?

我认为它会是这样的:

Category
belongs_to :category 
has_many   :categories

parent_category_id在类别表中的位置,这是一个很好的关系吗?还是我需要第二张表来呈现多对多关系?我想我需要像 belongs_to_and_has_many 这样的东西?

任何指导将不胜感激

4

3 回答 3

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, ...
于 2012-06-06T04:41:13.480 回答
2

虽然迈克尔杜兰特的回答确实是正确的,但foreign_key可以在belongs_to电话中推断出来。这同样适用于classinhas_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
于 2012-08-07T18:06:30.947 回答
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并且不需要或不适合映射这种结构的第二个表。

于 2012-05-21T19:04:08.527 回答