我正在使用基于会话的购物车用于rails应用程序,我不允许使用数据库。
如果我的line_items控制器中不存在,我已经编写了这个帮助器来创建购物车。
def ensure_cart_exists
session.push(Array(:cart)) unless session.include?(:cart)
end
但是我收到了这个错误
undefined method `push' for #<ActionDispatch::Request::Session ...
当我在一个数组上尝试时,代码行在IRB中工作。有什么我不明白会话数组阻止我在这里使用它吗?
答案 0 :(得分:2)
一种风格的补充,但是像ensure_something_exists这样的方法对我来说是一个红旗。
而不是这样做:
ensure_cart_exists
session[:cart] << 'some data'
您应该设置一个方法,该方法将公开基础项(如果存在)或创建该对象(如果不存在)。然后使用该方法处理所有事情。所以:
def cart
session[:cart] ||= []
end
cart << 'some data'
答案 1 :(得分:1)
session
是类似哈希的对象,它不像数组那样。这样做:
def ensure_cart_exists
session[:cart] ||= []
end
答案 2 :(得分:1)
如果你想要一个班轮,也可以这样做:
(session[:cart] ||= []) << `some data`