我正在尝试将数组存储在轨道上,但解码时出现错误。我使用cookies[:test] = Array.new
And 当我尝试解码 @test = ActiveSupport::JSON.decode(cookies[:test]) 时出现错误。什么是实现我想要的正确方法?
问问题
4653 次
3 回答
5
写入 cookie 时,我通常将数组转换为字符串。
def save_options(options)
cookies[:options] = (options.class == Array) ? options.join(',') : ''
end
然后我在读取 cookie 时转换回数组。
def options_array
cookies[:options] ? cookies[:options].split(",") : []
end
我不确定这是否是“正确的方法”,但对我来说效果很好。
于 2013-09-17T00:56:11.460 回答
5
“Rails 方式”是使用JSON.generate(array)
,因为它是 Cookies 文档的第二个示例中使用的:
# 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]
例如,它会为您提供一个数组。
于 2017-04-07T13:23:17.733 回答
-5
使用session
,不使用cookies
。您不必对其进行解码,rails 会为您处理。以与您相同的方式创建会话:
session[:test] = Array.new
当你需要它时,像往常一样访问它
session[:test]
# => []
于 2013-09-16T22:06:36.203 回答