Сохранение объекта корзины в течение одного сеанса

#ruby-on-rails #session #shopping-cart

#ruby-on-rails #сеанс #корзина для покупок

Вопрос:

Я создаю интернет-магазин только для улучшения навыков rails. Я хочу разрешить неавторизованному пользователю добавлять товары в корзину. Для этого я должен каким-то образом сохранить объект корзины и элементы, добавленные к нему в сеансе или где-то еще. Как я могу это сделать?

Ответ №1:

Вы можете просто добавить хэш к сеансу пользователя (который также создается, если он еще не вошел в систему).

 session[:cart] = Array.new if !session[:cart]
 

И затем, когда он добавляет объект в корзину, вы можете добавить хэш в массив в сеансе следующим образом.

 session[:cart] << hash.new(:product_id => <id>, :quantity => 1337)
 

Конечно, вы также могли бы создать модель Cart и записать cart_id ее в сеанс следующим образом.

 session[:cart_id] = <cart_id>
 

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