Я использую сеанс для хранения моего объекта корзины покупокРельсов сессия магазина объектной модель
в моей корзине модели у меня есть
def initialize
@items = Array.new
end
def clean
@items = Array.new
end
Я хочу использовать сессии для хранения всего объекта корзины, так что я могу использовать метод выше
как этот
@cart = session[:cart] ||= Cart.new
но мой выход @cart странно
первый запуск раз выход
<%= @cart %>
#<Cart:0x007efc844d3af0>
<% @cart.clean %>
true
все нормально, но второй раз она выдавала содержание объекта
<%= @cart %>
{"items"=>[]}
<% @cart.clean %>
undefined method `clean'
Может сессия магазин весь объект?
Или что-то я сделал не так?
Спасибо.
EDIT:
<% session[:cart] = Cart.new %>
<%= session[:cart] %>
#<Cart:0x007efc868be0a0>
<% session[:cart] = session[:cart] ||= Cart.new %>
<%= session[:cart] %>
#<Cart:0x007efc868be0a0> #Because session[:cart] does not exist
<% session[:cart] = session[:cart] ||= Cart.new %>
<%= session[:cart] %>
{"items"=>[]} #Session does not store the cart object but store the cart object's content
EDIT 2:
<% @cart = session[:cart] ||= Cart.new %>
<%= @cart %> #session[:cart] is nil so print Cart.new
<br>
<% session[:cart] = Cart.new %>
<% @cart = session[:cart] ||= Cart.new %>
<%= @cart %> #session[:cart] isn't nil so print session[:cart]
У меня оба два выхода Корзина объекта
при обновлении страницы и запустить тот же код
<% @cart = session[:cart] ||= Cart.new %>
@cart shou л.д. быть сессии [: телега], потому что сессия не ноль, а сессия [: корзина] должна быть корзина объекта, но это выход «{» элементы «=> []}»
EDIT 3:
Первый раз:
<%= session[:cart] %>
-> nil
<% session[:cart] = Cart.new %>
<%= session[:cart] %>
-> <Cart:0x00000007c112c0>
Второй раз:
<%= session[:cart] %>
-> {"items"=>[]} #Why it isn't a Cart object after I refresh?
<% session[:cart] = Cart.new %>
<%= session[:cart] %>
-> <Cart:0x00000007c112c0>
Может ли сеанс хранить объект Cart? Я хочу, чтобы оба 'session [: cart] .clean' и' @ cart.clean' работали, спасибо. –
Хранение объекта в сеансе - это не очень хорошая идея, см. Http://stackoverflow.com/questions/1095714/storing-objects-in-a-session-in-rails. В этой ветке обсуждаются подводные камни. Если вы настаиваете на сохранении объекта в сеансе, вам придется его восстановить, передав params в Cart.new (session [: cart]) или что-то подобное, поскольку сеанс сериализует объект и сохраняет его. Надеюсь это поможет. – Shishir
@Shishir Спасибо за помощь, я не хочу хранить элементы корзины в базе данных, поэтому я помещаю объект тележки в сеанс, а объект тележки - это небольшой массив для хранения идентификатора и количества продукта. Я не понимаю, почему я обновляю страницу, я получаю разный вывод сеанса. Пожалуйста, см. EDIT 2, спасибо. –