require 'erb'これを実行すると、
Template = <<END
foo is "<%=foo%>".
END
foo = 'foo1'
erb = ERB.new(Template, nil, '%')
erb.run
foo is "foo1".と表示される。
ERB.newの第2匹数はsafe_level、第3引数はtrim_mode。デフォルトのtrim_modeでは行頭の%が効かないので注意。実は第4引数もあるが、まずデフォルトでOK。
runにも実は1つ引数があり、bindingを渡すことができる。デフォルトはTOPLEVEL_BINDING。定義したはずの変数がテンプレートの中で参照できないときは、bindingを疑おう。
def override_fooこの例だと、テンプレートの中からはoverride_foo内のfoo、すなわちfoo2が見える。一方、
foo = 'foo2'
binding
end
erb.run(override_foo)
def not_override_foo(erb)この例だと、テンプレートの中からはnot_override_fooの中のfoo3ではなく、トップレベルのfoo1が見える。
foo = 'foo3'
erb.run
end
not_override_foo(erb)
0 件のコメント:
コメントを投稿