我正在写一个命令行工具,这将最终输出的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>
我在末日的应用程序需要这个,我发现我可以叫它以同样的方式我叫原文:
在西纳特拉的应用程序,我称之为指数:
erb :index
然后,在指数模板,我可以为任何子模板做相同的:
<div id="controls">
<%= erb :controls %>
..这显示了“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) %>
在此线程的其他答案假设你有与它内容的变量。 该版本检索内容。