如何在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)。
答案 0 :(得分:4)
这不是一个好主意:)模型是类,他们不应该知道在Web级别上发生了什么,这就是cookies
方法在ActionController
中实现的原因,但是ActionModel
或ActionHelper
中没有此类实施。如果您需要模型中的cookie值,则从控制器传递值。这就是它应该如何完成的。
答案 1 :(得分:1)
如@Vasili所述,cookies
仅在控制器中可用。但是,如果要访问帮助器或模型中的cookies
,只需将其作为参数传递即可,例如:
帮助程序示例:
module ApplicationHelper
def some_helper(given_cookies)
given_cookies[:foo] = 'bar'
end
end
视图中:
<%= some_helper(cookies) %>