ruby – 将一个erb文件包含到另一个文件中

我正在编写一个命令行工具,最终将输出一个HTML报告。该工具是用Ruby编写的。 (我没有使用Rails)。我试图将应用程序的逻辑保留在一组文件中,另一个集合中的HTML模板(.erb文件)。

我有一个非常烦人的问题:我不能成功地将一个.erb文件包含到另一个。

具体来说,我正在尝试这样做(伪代码):

<html>
<head>
  <style type='text/css'>
    [include a stylesheet here]
    [and another one here]
  </style>
</head>
<body>
  <p>The rest of my document follows...

该示例代码段本身是一个erb文件,它正在从应用程序逻辑中调用。

我以这种方式做事情,所以我可以将样式表从主模板中删除,以便更容易/更清洁地维护应用程序。但是,最终产品(报告)需要是一个单独的,没有依赖关系的独立HTML文件,因此,当生成报告时,我想将这些样式表内联到文档头中。

这似乎应该很简单,但是我最后一个小时把我的头撞在墙上(和谷歌,RTMF’ing),我根本没有任何运气。

这应该怎么做?谢谢。

可以通过从<%=%>内的子模板评估来嵌套ERB模板。的主模板。

<%= ERB.new(sub_template_content).result(binding) %>

例如:

require "erb"

class Page
  def initialize title, color
    @title = title
    @color = color
  end

  def render path
    content = File.read(File.expand_path(path))
    t = ERB.new(content)
    t.result(binding)
  end
end

page = Page.new("Home", "#CCCCCC")
puts page.render("home.html.erb")

home.html.erb:

<title><%= @title %></title>
<head>
  <style type="text/css">
<%= render "home.css.erb" %>
  </style>
</head>

home.css.erb:

body {
  background-color: <%= @color %>;
}

生产:

<title>Home</title>
<head>
  <style type="text/css">
body {
  background-color: #CCCCCC;
}
  </style>
</head>

转载注明原文:ruby – 将一个erb文件包含到另一个文件中 - 代码日志