我需要能够使用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)
答案 0 :(得分:2)
FOO
/ BAR
常量本身存在于ruby中,而不是模板中,因此重新定义警告。
如果你需要一个常数的不同值,那么它显然不是常数。如果值相同 - 则多个定义中没有任何意义
同时考虑将binding
传递给result
,默认情况下它是顶级范围,但可以更改