Во-первых, я бы добавил логическое поле в таблицу продуктов, чтобы определить, можно ли персонализировать продукты.
Далее я бы порекомендовал создать новую пользовательскую модель, содержащую персонализации ипринадлежат к позициям.
Таблица «персонализации» будет содержать поля id, line_item_id, custom_front и custom_back.
Вам придется переопределить страницу продукта, чтобы показать текстовые поля для custom_front и custom_back, когда is_personalizeable имеет значение true.
Кроме того, когда товар добавляется в корзинувам нужно будет добавить обратный вызов, чтобы вставить его в таблицу персонализаций (если продукт можно персонализировать) и привязать его к позиции.Вам, вероятно, придется переопределить основные методы добавления Spree в корзину здесь.
Я рекомендую этот метод, потому что:
- Абстрагирование его в отдельную таблицу немного более удобнос точки зрения обслуживания, т. е. когда вы собираетесь обновить Spree в будущем, к вашей таблице не нужно будет прикасаться.
- Модель данных немного более нормализована.Не все позиции будут иметь прикрепленные персонализированные данные, поэтому у вас будет немного меньше места для хранения данных, если хранить их в отдельной таблице.