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