ruby-on-rails - 如何使用 Assets 管道在mailer中使用样式表的绝对路径?

标签 ruby-on-rails ruby-on-rails-3 asset-pipeline

Mailer模板中的 View 助手为我提供了样式表和图像的相对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上, Assets 管道已生效。

最佳答案

`config.action_controller.asset_host 处理从ActionController生成的 View 中的主机前缀。

对于电子邮件中生成的任何内容,您都在寻找 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"
    

    请注意,您不需要为默认的URL主机指定http前缀,而需要为 Assets 主机指定http前缀。

    我在应用程序初始化程序后的 environment.rb 中指定了这些。我建议为每个环境域设置一个应用程序配置变量。

    关于ruby-on-rails - 如何使用 Assets 管道在mailer中使用样式表的绝对路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7801102/

    相关文章:

    mysql - 运行 rake db :migrate 时出错

    ruby-on-rails-3 - #<ActiveRecord::ConnectionAdapters::TableDefinition:0x9dee690> 的未定义方法 `database_authenticatable'

    ruby-on-rails - Rails 5 Assets 未在生产中加载

    ruby-on-rails - Rails 3迁移以添加未签名的int列

    ruby-on-rails - Rails_admin - has_many 关联 - 默认值

    javascript - 如何在不重新加载父级的情况下向 Rails Controller 发送 ajax 请求后关闭弹出窗口

    css - Rails 4 样式表加载(twitter bootstrap 和更少)

    ruby-on-rails-3 - Ckeditor 在根 URI 中搜索资源,而其应用程序位于子 URI 上

    ruby-on-rails - postgresql-common 和 postgresql-contrib 之间的区别

    ruby-on-rails-3 - 设计 sign_out_and_redirect flash 通知