使用ERB创建单独的模板

时间:2016-05-10 16:57:42

标签: ruby erb

我需要能够使用ERB创建不同的模板,而不是将它们全部按顺序附加(假设.result返回0)。

例如:

require 'erb'

ERB.new("<% FOO = 'foo' %>\n<% BAR = 'bar' %>").result
ERB.new("<% FOO = 'foo' %>\n<% BAR = 'bar' %>").result

返回以下警告:

(erb):1: warning: already initialized constant FOO
(erb):1: warning: previous definition of FOO was here
(erb):2: warning: already initialized constant BAR
(erb):2: warning: previous definition of BAR was here

证明第二个ERB附加在第一个,或者其他一些恶作剧在这里发生。我已尝试使用绑定和eout_var的各种路由无效。

我如何让ruby了解这些是两个不同的模板而不是整体的两个部分?

鉴于已接受的答案,这将是我设计的问题示例的解决方案:

require 'erb'

class Foo
  def get_binding
    binding
  end
end

class Bar
  def get_binding
    binding
  end
end

ERB.new("<% FOO = 'foo' %>\n<% BAR = 'bar' %>").result(Foo.new.get_binding)
ERB.new("<% FOO = 'foo' %>\n<% BAR = 'bar' %>").result(Bar.new.get_binding)

1 个答案:

答案 0 :(得分:2)

FOO / BAR常量本身存在于ruby中,而不是模板中,因此重新定义警告。

如果你需要一个常数的不同值,那么它显然不是常数。如果值相同 - 则多个定义中没有任何意义

同时考虑将binding传递给result,默认情况下它是顶级范围,但可以更改