Rails模型has_many与同一模型的关联

时间:2019-03-23 11:47:05

标签: ruby-on-rails postgresql migration associations activemodel

我有两个模型:CategorySubcategory

我可能会遇到子类别将包含更多子类别

的情况

如何使用Rails关联?

现在我的代码:

category.rb

class Category < ApplicationRecord
  has_many :subcategories, :dependent => :destroy
end

subcategory.rb

class Subcategory < ApplicationRecord
  belongs_to :category
  has_many :products, :dependent => :destroy
end

可能的例子:

Category 可读-> Subcategory 书籍-> Subcategory 儿童书籍 ->产品

3 个答案:

答案 0 :(得分:1)

这是多态belongs_to关联的好例子。

#on Subcategory model
belongs_to :parent, polymorphic: true
has_many :subcategories, as: :parent, dependent: :destroy

#on Category model
has_many :subcategories, as: :parent, dependent: :destroy


#on the database
t.references :parent, polymorphic: true, index: true # this adds two columns, parent_id and parent_type

现在,您可以将任何东西分配为子类别的父项,并且可以调用subcategory.parent来获取“类别”或“子类别”

https://guides.rubyonrails.org/association_basics.html#polymorphic-associations

答案 1 :(得分:1)

您见过https://github.com/stefankroes/ancestry吗?

祖先是一颗宝石,它可以将Ruby on Rails ActiveRecord模型的记录组织为树结构(或层次结构)。

答案 2 :(得分:0)

您可以尝试通过迁移将subcategory_id添加到您的子类别模型中,并在子类别模型中添加has_many :subcategories。 或者您可以添加 belongs_to :parent, :class_name => "Subcategory", :foreign_key => "parent_subcategory_id" has_many :child_subcategories, :class_name => "Subcategory", :foreign_key => "child_subcategory_id"