Для проекта, над которым я работаю, в магазине есть два типа товаров - реальный товар и группа товаров.
Для этого обсуждения назовем их «1 футболка» и «коробка футболок». Для одной футболки мне нужно сохранить обычные атрибуты - цену, артикул, размер, цвет, описание и т. д. Для коробки футболок мне нужно иметь цену, артикул, описание и список футболок. рубашки, которые входят в комплект.
Так что прямо сейчас я представляю это с моделями Shirt и ShirtCollection. Я вижу, что это вызовет трудности в будущем, когда мне понадобится составлять отчеты и управлять заказами, а также проверять уникальность артикулов.
Итак, как лучше всего это представить?





У меня бы были следующие модели
Футболка
TshirtBox has_many TshirtItems
TshirtBoxItems (это в основном таблица соединений с идентификаторами tshirt_box_id и tshirt_id) принадлежит_to TshirtBox
TshirtBoxItems - это способ связать футболку с коробкой и, возможно, другими вещами в будущем.
У вас может быть таблица Tshirt и затем ссылаться на нее с помощью ассоциации has_many: through.
Футболка - id, артикул, цена, размер, цвет, описание, is_box
TshirtBox - parent_tshirt (идентификатор, который ссылается на футболку), child_tshirt (идентификатор, который ссылается на футболку)
Ознакомьтесь с этой ссылкой, чтобы узнать больше о самореферентном has_many: через http://www.aldenta.com/2006/11/10/has_many-through-self-referential-example/