在Rails 5中,如何在模型或帮助器中访问cookie方法?

时间:2017-03-31 22:05:28

标签: ruby-on-rails cookies

如何在Rails模型或帮助程序中访问cookie?

尝试干掉一些控制器方法,我试图将多个控制器调用移到cookie()到application_helper.rb和/或模型中。

在application_helper.rb中的作用

cookies[:foo]
ActionDispatch::Cookies.cookies[:foo]
ActionController.cookies[:foo]
ActionDispatch::Cookies::ChainedCookieJars.cookie[:foo]

所有这些导致未定义的方法'cookies'

注意:简单地反驳MVC教条的好意思答案错误地放在这里......我已经构建了足够长的时间(几十年),知道何时在MVC线外(如果可能)着色是更好的路线。但是,即使在浏览Rails源代码后,精确的语法也无法实现。这个问题是由一个有些复杂的情况引起的,其中包括跨域中cookie的浏览器处理不一致,ajax环境有时包括本地文件(Chrome拒绝管理cookie)。

2 个答案:

答案 0 :(得分:4)

这不是一个好主意:)模型是类,他们不应该知道在Web级别上发生了什么,这就是cookies方法在ActionController中实现的原因,但是ActionModelActionHelper中没有此类实施。如果您需要模型中的cookie值,则从控制器传递值。这就是它应该如何完成的。

答案 1 :(得分:1)

如@Vasili所述,cookies仅在控制器中可用。但是,如果要访问帮助器或模型中的cookies,只需将其作为参数传递即可,例如:

帮助程序示例:

module ApplicationHelper
  def some_helper(given_cookies)
    given_cookies[:foo] = 'bar'
  end
end

视图中:

<%= some_helper(cookies) %>