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

Rails model has_many association to the same model

我有两个模型: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 儿童读物 --> 产品

您可以尝试通过迁移将 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"

这是多态 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