У модели Rails есть ассоциация has_many с той же моделью - PullRequest
2 голосов
/ 23 марта 2019

У меня есть две модели: Category и Subcategory

И у меня может быть ситуация, что Подкатегория будет включать в себя больше Подкатегории

Как я могу это сделать с ассоциациями рельсов?

Теперь мой код:

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 Книги для детей -> товары

Ответы [ 2 ]

1 голос
/ 23 марта 2019

Это хороший случай для полиморфной 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

0 голосов
/ 23 марта 2019

Вы можете попытаться добавить 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"

...