2015-02-09 104 views
2

我有一个模板,其中包含用于渲染的各种变量。Ruby渲染特定变量

有没有一种方法可以在模板中呈现特定的变量,无一例外。

e.g. template_content = "My name is <%=firstname%>. I live at <%=location%>" 

variable_hash = {firstname: "eric"} 

Erubis::Eruby.new(template_content).result(variable_hash) 

预期输出:

"My name is eric. I live at <%=location%>" 

我的使用情况是第一个变量渲染,并获得呈现的内容。

然而,当我在上面的代码运行提供了异常: “未定义的局部变量或方法location

我使用Erubis进行渲染。我对ERB渲染也很好。只需要使用ruby脚本进行渲染。

任何方式使其工作?

+0

当位置数据丢失时,您期望输出什么?你想默认为空字符串? – 2015-02-09 10:11:03

+0

@NeilSlater预期输出:“我的名字是eric,我住在<%=location%>” – abrocks 2015-02-09 10:12:05

+0

它看起来像你想用它来呈现你的用户提供的内容。在这种情况下,我必须告诉你,这不是安全的,恰恰相反。使用ERB模板,模板作者可以执行任意的ruby代码和应用程​​序中的所有内容,包括访问数据库,窃取所有数据并破坏服务器。你绝对不想运行你的用户提供的erb模板! – 2015-02-09 10:12:52

回答

1
module MyModule 
    def method_missing(method_name) 
    super 
    rescue NameError => e 
    return method_name 
    end 
end 

eb = Erubis::Eruby.new('My name is <%=firstname%>. I live at <%=location%>') 
eb.extend(MyModule) 
result = eb.result(:firstname =>'Ab') 
puts result 

不知道这是否是一个好的解决方案,可能有更好的解决方案。