【问题标题】:Where can I use cookies in Ruby on Rails我在哪里可以在 Ruby on Rails 中使用 cookie
【发布时间】:2011-04-16 17:28:05
【问题描述】:

我正在使用控制器的初始化程序来设置我需要的东西。

def initialize
  super()
  a = cookies[:a] # EXCEPTION

end

但是我不能使用cookie,因为它是空的,系统还没有从标题中读取它们。

同样的问题出现在 ASP.NET MVC 中,我无法在构造函数中访问 c​​ookie,但我可以在 Initialize() 方法中访问它们。

如何在 Rails 中获取 cookie?

【问题讨论】:

    标签: ruby-on-rails cookies controller initialization


    【解决方案1】:

    以前我也有这个问题,这应该可以:

    cookies['a'] = 'value'
    a = cookies['a']
    

    【讨论】:

      【解决方案2】:

      如果您想在每个请求之前进行设置,您应该使用before_filter

      class MyController << ApplicationController
        before_filter :cookie_setup
      
        def cookie_setup
          a = cookies[:a]
          .. whatever you want to do with 'a'
        end
      end
      

      【讨论】:

        【解决方案3】:

        具体来说,cookies 是一个散列,您正在做的是将一个具有 hash[:key] = value 语法的键值对添加到散列中。所以添加一个键,而不分配一个值,当你要求它时会给你一个 nil 值。

        irb(main):006:0> cookies = {}
        => {}
        irb(main):007:0> cookies[:a] = 'value'
        => "value"
        irb(main):008:0> cookies.inspect
        => "{:a=>\"value\"}"
        irb(main):010:0> a= cookies[:b]
        => nil
        irb(main):011:0> cookies.inspect
        => "{:a=>\"value\"}
        

        【讨论】:

        • cookie 不是零,我确实检查了它们。还是谢谢。
        • 我想你误会了。您在代码中添加到键的值为零。 a= cookies[:a] 您没有为键分配值:a。因此,当您要求稍后在a 中存储的值时,它将为零。因为cookies[:a] 的计算结果为零。您的问题与构造函数中的访问无关,它与不了解如何将键值对添加到哈希的语法有关。
        • 对不起,你不明白。问题在于从初始化程序访问 cookie,因为请求对象为零。浏览器中有“a”cookie,所以它不是 nil。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-15
        • 1970-01-01
        • 1970-01-01
        • 2016-10-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多