我的Mailer模板中的视图帮助器为我提供了样式表和图像的相对URL。当然,如果我在Gmail中查看电子邮件,这将无效。
在apps/views/layouts/mailer.html.erb
<%= stylesheet_link_tag "application" %>
...
<%= link_to(image_tag("logo.png"), "http://mysite.com") %>
呈现为:
<link href="/assets/application-c90478153616a4165babd8cc6f4a28de.css" media="screen" rel="stylesheet" type="text/css" />
...
<a href="http://mysite.com"><img alt="Logo" src="/assets/logo-d3adbf8d0a7f7b6473e2130838635fed.png" /></a>
如何让Rails给我绝对链接呢?我在Rails 3.1上,资产管道正在生效。
答案 0 :(得分:13)
`config.action_controller.asset_host 处理从ActionController生成的视图中的主机前缀。
对于电子邮件中生成的任何内容,您正在寻找 ActionMailer 配置选项,更具体地说:
ActionMailer::Base.asset_host
将处理您的image_tags
和ActionMailer::Base.default_url_options[:host]
会照看您的link_to
代码。例如:
ActionMailer::Base.asset_host = "http://blah.com"
ActionMailer::Base.default_url_options[:host] = "blah.com"
请注意,您不需要为默认网址主机指定http前缀,也不需要为资产主机指定。
我在应用程序初始化程序后面的 environment.rb 中指定了这些内容。我建议为每个环境域设置一个应用程序配置变量。
答案 1 :(得分:11)
对于rails 3.2和ActionMailer,请使用:
config.action_mailer.asset_host = "http://www.example.com"
答案 2 :(得分:3)
这可能有些骇人听闻,但如果您指定资产主机,则在呈现链接时全部为helpers will take it into account。所以,如果你设置
config.action_controller.asset_host = "http://mysite.com"
在您的配置中,stylesheet_link_tag
将包含主机名。
答案 3 :(得分:0)
在这个帖子中,火箭科学家和乔询问了其他想法:
http://apidock.com/rails/ActionView/Helpers/AssetTagHelper/stylesheet_link_tag
您可以按如下方式生成完整的css(如果您不关心资产托管)。然而David Radcliffe的回答应该有效。
stylesheet_link_tag "http://www.railsapplication.com/style.css" # => <link href="http://www.railsapplication.com/style.css" media="screen" rel="stylesheet" type="text/css" />