带有奇怪路由错误的继承应用,没有路由匹配{}

kra*_*ene 5 ruby routes ruby-on-rails ruby-on-rails-3

每当其中一个邮件发送时如果主体包含类似的内容link_to root_url就会发出这种令人难以置信的无益错误:

ActionView::Template::Error: No route matches {}
Run Code Online (Sandbox Code Playgroud)

跟踪要么无用,要么指向该link_to方法.因为它在这里也是非常难以检测的,所以我要求堆栈溢出.

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

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

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

更新4:它在常规的rails视图中工作正常.

更新5: FIXEDimage_tag现在是不是在电子邮件中提供的主机,输出:http://assets/...png.FFFFF.

更新6:我把它缩小到我得到同样的错误(在控制台中)app.url_for.我认为这可能是相关的.

kra*_*ene 6

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

虽然我不同意这种差异,但你可以做的却不多,所以这就是我最终做的事情:

link_to root_url, root_url
Run Code Online (Sandbox Code Playgroud)

现在,为什么我会同时使用它们?有两个原因:

  1. 我想将url作为锚文本和href.
  2. 如果URL更改,我不想更新所有这些字符串.