Как реализовать сессионную функцию «добавить в корзину» в Rails - PullRequest
1 голос
/ 15 декабря 2009

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

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

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

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

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

1 Ответ

1 голос
/ 16 декабря 2009

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

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

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

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

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

...