Rails 模型 has_many 与同一模型的关联
Rails model has_many association to the same model
我有两个模型: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
儿童读物 --> 产品
您可以尝试通过迁移将 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
我有两个模型: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
儿童读物 --> 产品
您可以尝试通过迁移将 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