在Rails中将数组添加到会话数组中

时间:2015-03-05 11:09:39

标签: ruby-on-rails ruby session

我正在使用基于会话的购物车用于rails应用程序,我不允许使用数据库。

如果我的line_items控制器中不存在,我已经编写了这个帮助器来创建购物车。

def ensure_cart_exists
  session.push(Array(:cart)) unless session.include?(:cart)
end

但是我收到了这个错误

undefined method `push' for #<ActionDispatch::Request::Session ...

当我在一个数组上尝试时,代码行在IRB中工作。有什么我不明白会话数组阻止我在这里使用它吗?

3 个答案:

答案 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`