如何从ApplicationController(Rails)访问cookies

24

我想要访问Cookie并执行相同的操作,无论是哪个操作还是控制器。

我不想编写一个方法,从我的众多动作方法中调用它,因为除了很麻烦外,这也不太适合敏捷的代码。我宁愿在application_controller.rb中从ApplicationController类(所有控制器类的超类)调用我的cookie处理方法。

但是,在ApplicationController类的正文中调用cookies()会引发“未定义方法”错误。(我猜测这意味着cookies在稍后才被定义。)

我该怎么办?我应该覆盖ApplicationController的initialize()方法,并从那里调用我的cookie处理方法吗?如果是这样,我应该如何将参数传递给超级构造函数?

附:我正在使用Rails 2.3.5

3个回答

27

这是一个哈希表,不是一个方法:

cookies[:some_key]
使用...而不是:
cookies(:some_key)

2
谢谢。但实际上它不是返回哈希的方法吗?cookies[:key]真正的简写是cookies()[:key]?无论如何,你能帮我找到一个解决方案吗?调用cookies并期望得到一个哈希并不能避免我之前遇到的错误。 - JellicleCat
这是一个返回CookieJar对象的方法(它继承自Hash)。你究竟想做什么需要访问该方法而不是cookie数据? - markquezada
1
我需要获取cookie数据。问题是如何在不从每个操作中调用它的情况下访问它。(例如,如何从超类中访问它,而不是从控制器内的方法中调用它?) - JellicleCat
这是正确的答案。我使用js-cookie设置了一个cookie,并能够在Rails控制器上执行cookies[:some_key],这很正常。谢谢。 - gsumk

9
这可能适用于您:
class ApplicationController
  before_filter :handle_cookies
  def handle_cookies
    # Do whatever it is you want to do with your cookies
  end
end
< p > before_filter 方法会在将 cookies 编译成哈希表后调用您指定的任何子例程(:handle_cookies)。 将此代码添加到应用程序控制器中意味着所有其他控制器都会继承它并执行相同的功能。 < /p >

0

我正在使用Rails 5,以下代码适用于我。

cookies[:key_name]

2
这不是JavaScript或Java,而是Ruby。括号不是必需的,cookies[:key_name] - equivalent8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接