我有两个模型:Category
和Subcategory
我可能会遇到子类别将包含更多子类别
的情况如何使用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
儿童书籍 ->产品
答案 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"