Я написал приложение для интернет-магазина одежды на Rails 2.3.5. Я хочу показывать связанные продукты, когда клиент просматривает страницу сведений о продукте.
Например, если клиент просматривает страницу сведений о костюме, я хотел бы отобразить аксессуары, которые подходят к платью, такие как жилет, туфли и ремень. Я назвал сопутствующие товары ансамблем. Тем не менее, жилет, обувь и ремни также являются продуктами, из-за которых я борюсь.
У меня это работает следующим образом, но я знаю, что это не путь Rails. У меня есть таблица продуктов для всех продуктов. Здесь это не важно, но у меня также есть таблица ProductDetails. У меня есть таблица Ensembles со следующими столбцами:
- product_id — основной или исходный продукт, отображаемый на странице сведений.
- наряд_ид - сопутствующий товар или аксессуар
При настройке данных в списке продуктов для каждого продукта у меня есть ссылка на ансамбль. Эта ссылка ведет к действию index в контроллере Ensembles.
Используя идентификатор из «основного» продукта, я нахожу все связанные строки ансамбля по product_id или создаю новый ансамбль и назначаю идентификатор из основного продукта в качестве product_id. Я хотел бы просто сделать @product.related_products, чтобы получить коллекцию Ensemble.
Также на индексной странице я перечисляю столбцы основного продукта, чтобы пользователь мог быть уверен, что его основной продукт был тем, который он выбрал из списка. У меня также есть список выбора других продуктов с действием «Добавить в ансамбль».
Наконец, на той же индексной странице у меня есть таблица, в которой отображаются продукты, которые уже находятся в ансамбле, и в этом списке каждая строка имеет ссылку на удаление для удаления определенного продукта из ансамбля. Было бы неплохо, если бы для одной строки ансамбля @ensemble я мог сделать @ensemble.product, чтобы получить продукт, связанный с нарядом_id строки ансамбля.
У меня он работает без ассоциаций, но мне приходится выполнять запросы в контроллере для создания собственных коллекций @product, @ensemble и @ensembles. Кроме того, я нашел единственный способ уничтожить строку ансамбля с помощью Ensemble.connection.delete (sql для удаления), простой @ensemble.destroy не работает.
Кто-нибудь знает, как я настроил бы ассоциации, или есть ссылка на сайт, объясняющий аналогичную настройку. Ни один из примеров, которые я нашел, не использует одну и ту же таблицу. У них А связано с Б через В. Я хочу, чтобы А было связано с другими А через Б.