5

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

4

3 回答 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 回答