如何在邮件模板中生成正确的 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_urlthing_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?

在视图而不是模板中生成带有 Django 静态 url 的图像标签

在 Java EE 6 中生成激活 URL

如何在 Django 模板中生成换行符

如何在列表中生成动态 url?