Таблица "Категории"
create_table :categories do |t|
t.string :name, null: false, unique: true
t.integer :parent_id, index: true, foreign_key: true
end
В таблицу "Товары/Items" добавляешь:
t.references :category, index: true, foreign_key: true, null: false
Модель "Категории":
has_many :items, dependent: :destroy
has_many :subcategories, class_name: 'Category', foreign_key: :parent_id, dependent: :destroy
belongs_to :parent_category, class_name: 'Category', foreign_key: :parent_id
scope :parent_categories, -> { where(parent_id: nil) }
Модель "Товары"
belongs_to :category
# Что бы получить все основные категории
Category. parent_categories
# Получить подкатегории категории
Category.first.subcategories
# Получить товары категории
Category.first.items