私は、最終的に 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 時間、壁に頭をぶつけながら (そして Google で検索し、RTMF で検索しながら) まったくうまくいきません。
これはどのように行うのでしょうか? ありがとうございます。
ベストアンサー1
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>
ホーム.css.erb:
body {
background-color: <%= @color %>;
}
生成:
<title>Home</title>
<head>
<style type="text/css">
body {
background-color: #CCCCCC;
}
</style>
</head>