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

os8fio9y  于 2023-01-08  发布在  Ruby
关注(0)|答案(4)|浏览(164)

我正在编写一个命令行工具,它最终将输出一个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),我一点运气都没有。
你要怎么做?谢谢。

s3fp2yjn

s3fp2yjn1#

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>
pengsaosao

pengsaosao2#

我需要在Sinatra应用程序中使用这个,我发现我可以用调用原始应用程序的方式调用它:
在Sinatra应用程序中,我调用索引:

erb :index

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

<div id="controls">
  <%= erb :controls %>

..显示"controls.erb“模板。

6bc51xsx

6bc51xsx3#

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

不起作用,当您使用erbcli实用程序时,将覆盖多个**_erbout**变量,并且仅使用最后一个变量。
像这样使用它:

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

dldeef674#

在我的.erb文件中,我必须这样做:

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

本帖中的其他答案假设您有一个包含内容的变量,这个版本检索内容。

相关问题