1つのerbファイルを別のerbファイルに含める 質問する

1つのerbファイルを別のerbファイルに含める 質問する

私は、最終的に 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>

おすすめ記事