activerecord,嵌套类别?

时间:2012-05-21 18:59:24

标签: ruby-on-rails-3 activerecord nested relationship categories

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

我认为会是这样的:

Category
belongs_to :category 
has_many   :categories

我在类别表中有parent_category_id,这是一个很好的关系吗?或者我需要第二张桌子才能呈现出多对多的关系?我想我需要像belongs_to_and_has_many这样的东西?

任何指导将不胜感激

3 个答案:

答案 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和第二个表不需要或不适合映射这种结构。