如何在邮件模板中生成正确的 URL?
Posted
技术标签:
【中文标题】如何在邮件模板中生成正确的 URL?【英文标题】:How to generate correct URLs in mailer templates? 【发布时间】:2012-02-08 23:43:08 【问题描述】:我正在使用 Ruby on Rails 3.1.0,我想在 html 电子邮件消息中正确生成 URL。在我设置的环境文件中
config.action_mailer.default_url_options = :host => 'my_site.org'
在电子邮件视图文件 (.html.erb
) 我声明
<%= link_to @user.name, users_url(@user) %>
当我查看收到的电子邮件时,生成的 URL 是http://users/1
,当然不正确。那么,如何在邮件模板中生成正确的 URL,以便在正文中包含 http://my_site.org/users/1
链接?
我还尝试在我的mailer.rb
文件中设置default_url_options
class MyCustom::Mailer < ActionMailer::Base
default_url_options[:host] = 'my_site.org'
def test_sending
...
end
end
但它不起作用。
【问题讨论】:
【参考方案1】:users_path
是相对路径 (/users/1)。对于电子邮件,您需要绝对路径,因此请使用users_url(@user)
,这将提供http://myapp.com/users/1。
【讨论】:
如果我使用的路由没有thing_url
或thing_path
等辅助方法怎么办?【参考方案2】:
您的 action_mailer 设置正确。
但您应该使用 _url 而不是 _path 作为链接地址,
<%= link_to @user.name, users_url(@user) %>
【讨论】:
你说得对,但为了公平起见,我会接受第一个答案。还是谢谢你。【参考方案3】:看到你设置了配置选项。为确保它使用绝对路径,请使用:
<%= link_to, "My Profile", users_url(:only_path => false, @user) %>
或在链接中专门设置主机:
<%= link_to, "My Profile", users_url(:host => "example.com", @user) %>
这里有解释:
ActionView Helpers
【讨论】:
以上是关于如何在邮件模板中生成正确的 URL?的主要内容,如果未能解决你的问题,请参考以下文章
在 django 中生成用于通过电子邮件验证用户的验证 URL
为所有从包路由导入的前缀添加前缀时,如何在 Symfony 包的模板中生成 URL?