@JIuc75Rus

Как реализовать на Ruby on Rails структуру категория, под категории, в под категориях категории товаров, ну и сами товары в категориях товаров?

Суть задачи такова - есть основная категория, допустим это электроника также есть под категория, пусть будет Самсунг и в ней категории товаров - телефоны, телевизоры и т.д и соответственно сами товары. И в каких-то под категориях могут отсутствовать те или иные категории товаров. Какие применять связи для моделей? Как правильно организовать базу данных? Как отображать все это во вьюхах?
  • Вопрос задан
  • 753 просмотра
Решения вопроса 1
AlexanderMint
@AlexanderMint
Web Developer
Таблица "Категории"
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
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
hummingbird
@hummingbird
"... как писать код?", - это тоже надо было дописать в конец вашего текста.

Ну а вообще, если серьезно, то в таблицу categories добавляете поле parent_id. По умолчанию равно нулю (нет родительской категории). Думаю, тут все понятно.

Ну а дальше has_many в модель Category и belongs_to в Product. Про них (с примерами) вы можете почитать тут: guides.rubyonrails.org/association_basics.html

И вообще...
Как отображать все это во вьюхах?

Ну это вообще зашквар какой-то. Вам про циклы рассказывать или что?

Также будет полезно:
guides.rubyonrails.org/active_record_querying.html
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы