如何在cookie rails 4上存储数组?

时间:2013-09-16 22:03:17

标签: ruby-on-rails

我试图在rails上存储一个数组,解码时出现错误。 我用cookies[:test] = Array.new 当我试图解码时     @test = ActiveSupport :: JSON.decode(cookies [:test]) 我收到了一个错误。 什么是实现我想要的正确方法?

3 个答案:

答案 0 :(得分:5)

写入cookie时,我通常会将数组转换为字符串。

def save_options(options)
  cookies[:options] = (options.class == Array) ? options.join(',') : ''
end

然后我在读取cookie时转换回数组。

def options_array
  cookies[:options] ? cookies[:options].split(",") : []
end

我不确定这是否是“正确的方式”,但对我来说效果很好。

答案 1 :(得分:5)

“Rails方式”是使用JSON.generate(array),因为它是Cookie文档中第二个示例中使用的内容:

# Cookie values are String based. Other data types need to be serialized.
cookies[:lat_lon] = JSON.generate([47.68, -122.37])

来源:http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html

当你想要阅读它时,只需使用JSON.parse cookies[:lat_lon]例如,它就会为你提供一个数组。

答案 2 :(得分:-4)

使用session,而不是cookies。您不必解码它,rails会为您处理。以与现有相同的方式创建会话:

session[:test] = Array.new

当您需要它时,像普通

一样访问它
session[:test]
# => []