4

我正在使用 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在正文中包含链接?


我也尝试default_url_options在我的mailer.rb文件中设置

class MyCustom::Mailer < ActionMailer::Base
  default_url_options[:host] = 'my_site.org'

  def test_sending
    ...
  end
end

但它不起作用。

4

3 回答 3

9

users_path是相对路径 (/users/1)。对于电子邮件,您需要绝对路径,因此请使用users_url(@user),它将提供http://myapp.com/users/1

于 2012-01-12T17:17:35.357 回答
1

您的 action_mailer 设置是正确的。

但是你应该使用 _url 而不是 _path 作为 link_to,

<%= link_to @user.name, users_url(@user) %>
于 2012-01-12T17:18:24.573 回答
0

看到你设置了配置选项。为确保它使用绝对路径,请使用:

<%= link_to, "My Profile", users_url(:only_path => false, @user) %>

或在链接中专门设置主机:

<%= link_to, "My Profile", users_url(:host => "example.com", @user) %>

这里解释:

动作视图助手

于 2012-01-12T17:26:36.090 回答