Rails cookie的值与辅助范围的控制器不同?

时间:2014-05-28 07:10:27

标签: ruby-on-rails

ENV:

Rails 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并且读取的结果是字符串?

1 个答案:

答案 0 :(得分:0)

如果您想为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 }

检查Rails 4.1 documentation on Cookies

Rails 3.2文档引起了轻微的混淆on that issue,暗示Ruby数组可以stored directly作为最近修复by using JSON dump/load并随后by the safer JSON generate/parse修复的Cookie值。< / p>