Шаблон рендеринга Rails динамически не разрешает таблицы стилей

Я использую внешний 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 внутри результирующей строки.

Я также пробовал:

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

Но это приводит к тому же результату: MyApp::Application.assets["styles.css"].to_s.html_safe копируется дословно и фактически не разрешается. ApplicationController.render(template_path) также дает то же самое.

Как преобразовать шаблон в строку при разрешении содержимого таблицы стилей?


person Snowman    schedule 28.05.2018    source источник


Ответы (1)


В фильтре HAML, таком как :css, материал обрабатывается как строка, и вы должны использовать #{something} для запуска кода ruby.

:css
  #{MyApp::Application.assets["styles.css"].to_s.html_safe}
person Thomas R. Koll    schedule 28.05.2018
comment
Да, это было проблемой. Спасибо! - person Snowman; 28.05.2018