16

erbでテンプレートの継承にyieldを使用するにはどうすればよいですか? 単純な Ruby CGI スクリプトで erb を使用したいのですが、Rails とアプリケーション テンプレートのようにベース テンプレートとサブテンプレートを使用したいと考えています。

4

5 に答える 5

38
def a
  ERB.new('<%= yield %>').result(binding)
end
a{123}
#=> "123"

Kernel#binding呼び出しがメソッド内にあることが重要です。そのようにして、コンテキストにブロックが含まれます(ブロックERB#resultを取りません)。

于 2010-09-19T08:33:43.910 に答える
5

Tilt ( http://github.com/rtomayko/tilt/ ) を確認してください。これは、Sinatra でテンプレートを処理する gem であり、ERB の利回りを他の多くの優れた機能と共に提供します。

于 2011-11-02T15:27:13.850 に答える
4

Tilt を使用できますが、余分な依存関係を追加したくない場合は、erb で生成する方法のより良い例を次に示します。

require "erb"

class Controller
  TEMPLATE = ERB.new("Hello <%= @someone %>\n\n<%= yield %>")

  def initialize(someone)
    @someone = someone
  end

  def render
    TEMPLATE.result(self.get_binding { yield })
  end

  def get_binding
    binding
  end
end

puts Controller.new("World").render { "I'm Jack" }
# =>
Hello World

I'm Jack

ここで答えを見つけました。

于 2014-03-18T16:48:59.223 に答える
3

私はあなたができるとは思いません-Railsはアクションパックの一部としてそのインフラストラクチャを提供します。

あなたができるかもしれないことは、actionpackを取り、それをスクリプトに追加することです。

または、軽量のテンプレートシステムを自分で作成することもできます。

または、RailsまたはMerbまたはSinatraを使用します。

于 2010-03-18T03:00:52.757 に答える