我想发送一封带有深层链接的电子邮件回到我的应用程序中,但我不想对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
答案 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')%>