将一个erb文件包含在另一个中

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

我有一个非常恼人的问题:我无法成功将一个.erb文件包含到另一个.erb文件中。

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

   [include a stylesheet here] [and another one here]    

The rest of my document follows...

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

我正在这样做,所以我可以将样式表保留在主模板之外,以便更轻松/更清洁地维护应用程序。 但是,最终产品(报告)需要是一个没有依赖关系的单个独立HTML文件,因此,我希望在生成报告时将这些样式表内联到文档头中。

这看起来应该很容易,但是我在最后一小时一直撞到墙上(以及谷歌搜索和RTMF),我根本没有任何运气。

应该怎么做? 谢谢。

可以通过从主模板的<%=%>内评估子模板来嵌套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 %>    

home.css.erb:

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

生产:

 Home    

我在Sinatra应用程序中需要这个,我发现我可以像调用原始版本一样调用它:

在sinatra应用程序中,我称之为索引:

 erb :index 

然后,在索引模板中,我可以对任何子模板执行相同的操作:

 
<%= erb :controls %>

..which显示’controls.erb’模板。

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

不起作用,当您使用erb cli实用程序时,会覆盖多个_erbout变量,并且只使用最后一个。

像这样用它:

 <%= ERB.new(sub_template_content, eoutvar='_sub01').result(binding) %> 

从我的.erb文件中,我不得不这样做:

 <%= ERB.new(File.read('pathToFile/myFile.erb'), nil, nil, '_sub01').result(binding) %> 

这个post中的其他答案假设你有一个包含你内容的变量。 此版本检索内容。