【问题标题】:Rails: how can I access the request object outside a helper or controller?Rails:如何在助手或控制器之外访问请求对象?
【发布时间】:2011-02-04 07:48:25
【问题描述】:

在我的application_helper.rb 文件中,我有一个这样的函数:

def internal_request?
  server_name = request.env['SERVER_NAME']
  [plus more code...]
end

在控制器、模型和视图中需要这个函数。所以,我把这段代码放在lib/ 目录下的一个实用函数文件中。但是,这不起作用:我收到了关于 request 未定义的投诉。

如何访问lib/ 目录中的文件中的request 对象?

【问题讨论】:

  • 问题更多是关于将代码放在唯一的位置。我有一个使用请求对象的函数。此功能用于视图和控制器。我可以在两个地方复制代码,但是将代码放在 lib/ 目录中似乎更简洁,这样视图和控制器都可以访问单个函数。
  • 你的问题已经是我的答案了...请求对象可以从助手访问。 ;-)

标签: ruby-on-rails request helpers


【解决方案1】:

在这里似乎可行的最简单的事情是将请求对象传递给方法。

def internal_request?(request)
 server_name = request.env['SERVER_NAME']
 [plus more code...]
end

假设当这个方法被调用时,一个请求已经被发出,并且你可以将它传递给这个方法。

我正在尝试考虑模型需要直接调用此方法的场景。您似乎更有可能想要检查这是否是控制器中的 internal_request(如果您在视图中需要它,请将其标记为控制器中的 helper_method),然后告诉您的模型这是一个 internal_request。

【讨论】:

  • 希望得到允许直接实例化 Rack Request 对象的答案...
  • this answer 通过一种通用的方法来实现这一点
猜你喜欢
  • 2012-07-29
  • 2023-03-18
  • 2018-02-10
  • 2016-11-14
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
相关资源
最近更新 更多