使用 ERB 创建单独的模板
Creating separate templates with ERB
我需要能够使用 ERB 创建不同的模板,而不是按顺序附加它们(假设 .result
returns 0)。
例如:
require 'erb'
ERB.new("<% FOO = 'foo' %>\n<% BAR = 'bar' %>").result
ERB.new("<% FOO = 'foo' %>\n<% BAR = 'bar' %>").result
Returns 以下警告:
(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)
FOO
/BAR
常量存在于 ruby 本身,而不存在于模板中,因此重定义警告。
如果您需要一个常数的不同值,那么它显然不是一个常数。如果值相同 - 那么多个定义就没有意义
同时考虑将 binding
传递给 result
,默认情况下它是顶级范围,但可以更改
我需要能够使用 ERB 创建不同的模板,而不是按顺序附加它们(假设 .result
returns 0)。
例如:
require 'erb'
ERB.new("<% FOO = 'foo' %>\n<% BAR = 'bar' %>").result
ERB.new("<% FOO = 'foo' %>\n<% BAR = 'bar' %>").result
Returns 以下警告:
(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)
FOO
/BAR
常量存在于 ruby 本身,而不存在于模板中,因此重定义警告。
如果您需要一个常数的不同值,那么它显然不是一个常数。如果值相同 - 那么多个定义就没有意义
同时考虑将 binding
传递给 result
,默认情况下它是顶级范围,但可以更改