我使用会话来存储我的购物车对象
在我的购物车模型中
@cart = session[:cart] ||= Cart.new
我想使用session存储整个购物车对象,以便我可以使用上面的方法
像这样<%= @cart %>
#<Cart:0x007efc844d3af0>
<% @cart.clean %>
true
但我的@cart输出很奇怪
第一次运行输出
<%= @cart %>
{"items"=>[]}
<% @cart.clean %>
undefined method `clean'
一切都很好,但第二次输出对象的内容
<% 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
会话可以存储整个对象吗?
或者我做错了什么?
感谢。
编辑:
<% @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]
编辑2:
<% @cart = session[:cart] ||= Cart.new %>
我得到两个输出都是Cart对象
当我刷新页面并运行相同的代码时
<%= session[:cart] %>
-> nil
<% session[:cart] = Cart.new %>
<%= session[:cart] %>
-> <Cart:0x00000007c112c0>
@cart应该是会话[:cart],因为会话不是nil而session [:cart]应该是Cart对象,但它输出“{”items“=&gt; []}”
编辑3:
第一次:
<%= session[:cart] %>
-> {"items"=>[]} #Why it isn't a Cart object after I refresh?
<% session[:cart] = Cart.new %>
<%= session[:cart] %>
-> <Cart:0x00000007c112c0>
第二次:
DF.show()
答案 0 :(得分:2)
始终使用购物车对象。从会话初始化它,执行操作,最后将其序列化回会话。
class Cart
def initialize(params={})
@items = params[:items] || []
end
end
controller:
@cart = Cart.new(session[:cart])
//do operations on cart
session[:cart] = @cart