【发布时间】:2015-02-09 10:07:52
【问题描述】:
我有一个模板,其中包含用于渲染的各种变量。
有没有办法可以毫无例外地在模板中呈现特定变量。
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 脚本进行渲染。
有什么办法让它工作吗?
【问题讨论】:
-
当位置数据丢失时,您期望什么输出?你想默认为空字符串吗?
-
@NeilSlater 预期输出:“我叫 eric。我住在 ”
-
您似乎想使用它来呈现用户提供的内容。在这种情况下,我必须告诉你这是不安全的,恰恰相反。使用 ERB 模板,模板作者可以执行任意 ruby 代码以及应用程序中的所有内容,包括访问您的数据库、窃取您的所有数据以及破坏您的服务器。您绝对不想运行用户提供的 erb 模板!
-
@Holger只是模板不是用户提供的。这里也没有数据库操作。模板由我们的内部开发人员制作。我需要它来对部分呈现的字符串运行验证。例如所有链接格式正确。我在验证时没有所有变量值。
-
作为变体:
variable_hash = {firstname: "eric", location: "<%=location%>"};)
标签: ruby-on-rails ruby rendering eruby erubis