Rails渲染模板动态地不解析样式表

时间:2018-05-28 07:44:14

标签: css ruby-on-rails ruby haml

我使用外部API在Rails中发送电子邮件,因此需要编写自己的代码将模板呈现为字符串。

  def html_for_template(template_name)
    template_root = "app/views/emails"
    template_path = "#{template_root}/#{template_name}"

    haml = File.open(template_path).read
    html = Haml::Engine.new(haml).render
    content = ERB.new(html).result
  end

模板内容:

%html
  %head
    %meta{content: "text/html; charset=utf-8", "http-equiv" => "Content-Type"}
    %link{"data-turbolinks-track" => "true", href: "styles.css", media: "all", rel: "stylesheet"}

问题是,结果字符串实际上并不解析styles.css的内容,而只是复制文字字符串<link>...</link>,这是无用的,因为我需要在结果字符串中包含实际的CSS内容。 / p>

我也尝试过:

:css
  = MyApp::Application.assets["styles.css"].to_s.html_safe

但是这会产生相同的结果:MyApp::Application.assets["styles.css"].to_s.html_safe被逐字复制而不是实际解决。 ApplicationController.render(template_path)也会产生同样的结果。

如何在解析样式表内容时将模板渲染为字符串?

1 个答案:

答案 0 :(得分:1)

在像:css这样的HAML过滤器中,东西被视为字符串,您必须使用#{something}来运行ruby代码。

:css
  #{MyApp::Application.assets["styles.css"].to_s.html_safe}