32

最終的に HTML レポートを出力するコマンドライン ツールを作成しています。ツールはRubyで書かれています。(私はRailsを使用していません)。アプリケーションのロジックを 1 つのファイル セットに保持し、HTML テンプレート (.erb ファイル) を別のセットに保持しようとしています。

しかし、私は本当に厄介な問題を抱えています.1つの.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 ファイルである必要があるため、レポートの生成時にこれらのスタイルシートをドキュメント ヘッドにインライン化する必要があります。

これは簡単なように思えますが、私はこの 1 時間、頭を壁にぶつけて (そしてグーグルや RTMF を使って)、まったく運がありません。

これはどのように行われるべきですか?ありがとう。

4

4 に答える 4

39

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>
于 2012-04-20T06:25:07.147 に答える
10
<%= ERB.new(sub_template_content).result(binding) %>

erb cli ユーティリティを使用している場合、複数の_erbout変数がオーバーライドされ、最後の 1 つだけが使用されます。

次のように使用します。

<%= ERB.new(sub_template_content, eoutvar='_sub01').result(binding) %>
于 2013-12-31T11:04:38.243 に答える