【问题标题】:Ruby Rendering Specific VariableRuby 渲染特定变量
【发布时间】: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: "&lt;%=location%&gt;"} ;)

标签: ruby-on-rails ruby rendering eruby erubis


【解决方案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

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

【讨论】:

    猜你喜欢
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    相关资源
    最近更新 更多