5

每当其中一个邮件程序启动时,如果正文包含类似的link_to root_url内容,就会出现这个令人难以置信的无用错误:

ActionView::Template::Error: No route matches {}

跟踪要么是无用的,要么指向该link_to方法。由于这里也非常难以搜索,所以我问的是堆栈溢出。

更新 1:为了提供帮助,我发布了可怕的routes.rb文件:https ://gist.github.com/2955610

更新 2:在控制台中,app.root_url提供正确的返回。

更新3: link_to "whatever", root_url工作得很好。这么奇怪!

更新 4:它在常规 rails 视图中运行良好。

更新 5:已 修复现在image_tag没有在电子邮件中提供主机,输出:http://assets/...png。咳咳。

更新 6:我已将其范围缩小到与 (in console) 相同的错误app.url_for。我认为这可能是相关的。

4

2 回答 2

6

所以真正的答案是link_to在 ActionMailer 中的工作方式与在 ActionController 中不同。不同之处在于 ActionController 显然有一个名为 的选项:script_name,这为您做出了各种假设。

现在虽然我不同意这种差异,但您对此无能为力,所以这就是我最终要做的:

link_to root_url, root_url

现在,我为什么要同时使用两者?那么两个原因:

  1. 我想要 url 作为锚文本和 href。
  2. 如果 URL 发生变化,我不想更新所有这些字符串。
于 2012-06-20T17:35:57.907 回答
0

邮件程序的问题是您可能错过了“主机”选项?:)

于 2012-06-19T21:22:26.920 回答