如何在ActionMailer中获取基本URL?

时间:2014-05-14 11:32:14

标签: ruby-on-rails actionmailer

我想发送一封带有深层链接的电子邮件回到我的应用程序中,但我不想对URL进行硬编码,否则当我从一个环境移动到另一个环境时我必须切换它。如何从ActionMailer中获取Web应用程序的基本URL?例如,我希望能够拥有类似的东西:

<%= base_uri %>listCreate?first=foo&second=bar

在我的测试环境中渲染如下内容:

http://localhost:30000/myApp/listCreate?first=foo&second=bar

以及生产中的以下内容:

http://www.myDomain.com/myApp/listCreate?first=foo&second=bar

2 个答案:

答案 0 :(得分:4)

config/environments/production.rb

中设置默认网址选项
config.action_mailer.default_url_options = { :host => 'your.app.com' }

和邮件模板

链接应为

<%= link_to 'myapp', myapp_list_url %>

希望这可以提供帮助

您可以参考Actionmailer doc

答案 1 :(得分:2)

您可以在拥有该请求的当前主机的控制器中为您的邮件程序设置default_url_options。

在我的情况下,当我收到某些潜在客户创建表单中的信息时,我会发送一封电子邮件,因此我有一个LeadMailer。我的解决方案是创建一个before过滤器来设置邮件程序中的主机。

当然,您不需要在之前的过滤器中执行此操作,您可以在操作中进行设置。

我的解决方案看起来像这样:

class LeadsController < ApplicationController
  before_action :set_host, on: [:create]

  def set_host
    LeadsMailer.default_url_options = { host: request.host_with_port }
    LeadsMailer.asset_host = request.protocol + request.host_with_port
  end
end

我设置了asset_host配置,因为我想使用资产管道中的图像。

现在你可以像往常一样使用_url助手

<%= link_to 'something', something_url %>

或您的资产助手

<%= image_url('logo.png')%>