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

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

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

 session[:test] = Array.new 

当你需要它时,像平常一样访问它

 session[:test] # => [] 

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

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

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

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

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

“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] ,它就会为你提供一个数组。