【问题标题】:Rails request_url getting undefined local variable in MailerRails request_url 在Mailer中获取未定义的局部变量
【发布时间】:2015-06-21 21:19:50
【问题描述】:

在 Rails 3.2 应用程序中,我尝试在 Mailer 中使用浏览器 URL 和它的视图。

这是来自views/comment_mailer/comment_email.html.erb的代码:

<% fromurl = request_url %>

也试过了:

<% fromurl = request.url %>

但是,我得到了这个错误:

undefined local variable or method `request_url' for ...

在调试器(更好的错误 gem)中,如果我输入 request,我会得到 nil。

感谢您的帮助!

更新1:

我的问题似乎只存在于邮件和它的视图中。如果我将相同的代码放在普通视图中,它可以正常工作。我什至尝试在获取 URL 的helper/application_helper.rb 中添加帮助代码。它在其他视图中有效,但在邮件视图中我得到undefined local variable or method

【问题讨论】:

  • 当您说“在调试器中”时,您指的是 IRB 控制台吗?或者也许是binding.pry?因为在由 HTTP 请求执行的视图中,变量 request 永远不会是 nil。奇怪的是,在您的情况下,requestnil
  • 我正在使用 gem 更好的错误。它在错误时给了我一个 Rails 控制台。
  • 你能不能在你的视野里打电话给&lt;%= request.inspect %&gt;,看看是nil还是别的什么? (不要让错误发生,因为您最终会得到更好的错误控制台,我怀疑它会更改 request 变量的上下文,这就是我试图通过要求您输出来证明的原因 request.inspect )
  • 我猜在EMAIL模板中你不应该使用request,因为当你收到电子邮件时没有http请求
  • 我认为request 变量只能在控制器中访问。您可以通过在控制器方法@fromurl = request_url 中编写它并在视图&lt;% @fromurl %&gt; 中访问它来尝试它

标签: ruby-on-rails


【解决方案1】:

request 在邮件程序中不可用,如果您想使用请求 url,请将其存储在其他地方并检索它

例如,actionmailer_with_request 已经这样做了。

如果你使用像 puma 这样的服务器,我建议你 fork(或找到一个 fork),它使用 Thread.current 的替代品,例如 RequestStore 来存储请求(我打开了一个关于此的问题)。

【讨论】:

  • 我将代码放入 ApplicationController = $request_url = request.url。现在我可以在我的控制器中访问$request_url
猜你喜欢
  • 1970-01-01
  • 2016-01-10
  • 2014-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多