Как реализовать функцию добавления в корзину на основе сеанса в Rails

Привет, у меня проблема с реализацией функции добавления в корзину в моем приложении электронной коммерции rails. Здесь я не говорю о функции проверки. Просто «в корзину». Товары можно добавлять в корзину, не требуя от пользователей входа в свои учетные записи. Как только пользователь завершит добавление в корзину, перед проверкой пользователь войдет в систему. Моя проблема заключается в том, как лучше всего хранить эти элементы, добавленные в корзину. Я пытаюсь использовать сеанс. Я могу легко реализовать это, если пользователь добавляет в корзину ТОЛЬКО один товар в любом количестве. Но как временно хранить информацию, если пользователь проверяет несколько товаров с разным количеством. Мне нужна структура данных для хранения этой информации, но я не знаю, какую структуру данных использовать. Я имею в виду что-то вроде этого:

Session_id | product_id | quantity
wisidiri4i | 1234       | 3    
349sksksks | 3452       | 6

И так далее.....

Используя хэш, я могу хранить один элемент, но как хранить несколько элементов?? Используя таблицу БД, я могу это сделать, но как удалить эти записи из таблицы, если пользователь уходит с элементами, добавленными в корзину, но без проверки?

Я застрял здесь. Любая помощь будет оценена по достоинству. Спасибо


person Rup    schedule 15.12.2009    source источник


Ответы (1)


Как правило, вы должны использовать идентификатор сеанса вместе с базой данных для хранения продуктов. Это сводит к минимуму информацию о сеансе (только идентификатор) и обеспечивает максимальную гибкость. IMO - плохая идея помещать подобную структуру данных в хранилище сеансов: что, если вы решите изменить структуру данных позже? Вам придется поддерживать как старую, так и новую версии структуры данных.

Как вы заметили, проблема с решением на основе базы данных заключается в том, что в какой-то момент вам нужно удалить некупленные элементы из базы данных. Обычно это делается периодически (например, очищаются корзины старше X дней), где временные рамки могут основываться на размере базы данных (насколько она увеличивается, если тележки очищаются через 3 месяца? 6 месяцев) и от того, вероятно, вернутся в какой-то момент в будущем (вернутся ли они через 3 месяца? через 6 месяцев?).

Если вы решите сохранить информацию в сеансе, вы, вероятно, захотите выполнить простую сериализацию, например:

Session_id  |  Items
892jsls098s |  sku1:3,sku2:4,sku3:2

Единственным ограничением здесь является длина данных сеанса (обязательно добавьте проверку длины).

person Pete Campbell    schedule 16.12.2009