1

我有一个带有haml(3.1.4)电子邮件的应用程序(rails 3.2)。在电子邮件模板中,我想使用 link_to,但显然这 4 个都没有在生产中工作:

#{link_to(my_models_url)}
= link_to(my_models_url)

/ @url set to my_models_url
#{link_to(@url)}
= link_to(@url)

在开发模式下一切正常,但在生产中,我不断收到以下错误:

No route matches {}
 actionpack (3.2.0) lib/action_dispatch/routing/route_set.rb:503:in `raise_routing_error'

当我之前使用辅助方法时它可以工作:

/ @my_link set to link_to(my_models_url)
#{@my_link}
= @my_link

但这并不方便,如果电子邮件中有更多链接,而且总的来说,我不明白为什么前 4 个选项中的任何一个都不合适。我不知道这个问题来自哪里。我将不胜感激这方面的任何帮助...

解决方案:

感谢 iWasRobbed,我发现了我的问题所在:

  1. 所有 {resource}_path 和 {resource}_url 都必须在邮件程序中设置为@variables,它们在邮件程序视图中不可用
  2. 显然,mailer 中的 link_to() 方法与 rails 视图中的方法不同......它总是需要 2 个参数,因此不需要在视图中使用 link_to(@link),而是需要使用 link_to(@link,@link)。噗噗……
4

1 回答 1

0

您需要在mailer.rb文件中声明 URL。这与其说是 HAML 问题,不如说是 ActionMailer 的设计方式。

def some_mailer_here
  @url = my_models_url
end

然后在您的邮件视图中,您可以执行以下操作:

= link_to("My models URL", @url)

http://guides.rubyonrails.org/action_mailer_basics.html#generating-urls-in-action-mailer-views

于 2012-01-27T19:40:38.833 回答