ENV:
轨道3.2.15
ruby 1.9.3p194(2012-04-20修订版35410([x86_64-darwin12.2.0]
我在控制器中设置了cookie,并从helper方法中读取,结果两个不一样。为什么?
# in controller
cookies[:"position"] = { :value => [ 100,200 ], :expires => 1.years.from_now }
# read it same time, it display value is an array [100, 200]
# But I read this cookies in another request, it display "100&200"
# in helper
module WelcomeHelper
def get_position
cookies[:"position"]
end
end
```
get_position
方法返回100&200
我在哪里可以找到文件?我在代码中发现,它描述的数组可以直接存储在cookie中并直接读取:https://github.com/rails/rails/blob/v3.2.15/actionpack/lib/action_dispatch/middleware/cookies.rb#L45,但为什么我在cookie中存储了一个arry,而读取的结果是一个字符串?
如果您想在cookie中使用非字符串值,请先将其转换为JSON。
# using the preferred 1.9 hash syntax and no need to quote "position"
cookies[:position] = { value: JSON.generate([ 100,200 ]), expires: 1.years.from_now }
查看Cookies上的Rails4.1文档。
Rails3.2文档暗示Ruby数组可以直接存储为cookie值,这一点在这个问题上引起了一些混乱,最近通过使用JSON转储/加载以及随后更安全的JSON生成/解析修复了这个问题。