例如:
t = Test.new
t.test_string = "\#{foo} and \#{bar}"
t.save
然后我想在我的一个方法中插入这个字符串。
我已经尝试了几种选择:
ERB.new
foo = 'Hello'
bar = 'World'
ERB.new(t.test_string).result
它不起作用,test_string打印为"\#{foo} and \#{bar}"
。
只有在没有转义符号'\'的情况下打印它才能正常工作。
ERB.new("#{foo} and #{bar}").result
=> "Hello and World"
但我怎样才能让它编程呢?
eval
foo = 'Hello'
bar = 'World'
eval '"' + t.test_string + '"'
它有效,但不安全。
我还有其他选择吗?或者如何让ERB.new
工作?
答案 0 :(得分:1)
也许我不太了解你的需求 这是你在找什么?
require 'erb'
erb_template = ERB.new('foo equals <%= bar %> and 2 + 2 = <%= 2 + 2 %>')
bar = 'baz'
erb_template.result(binding) # => foo equals baz and 2 + 2 = 4
binding
方法捕获您当前的范围,以便ERB在此范围内呈现模板。