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