gpt4 book ai didi

ruby - 使用哈希值渲染 ERB 模板

转载 作者:数据小太阳 更新时间:2023-10-29 06:20:23 25 4
gpt4 key购买 nike

我一定是忽略了一些非常简单的东西,但我似乎无法弄清楚如何使用散列映射中的值呈现一个简单的 ERB 模板。

我是 ruby​​ 的新手,来自 python。我有一个 ERB 模板(不是 HTML),我需要使用从外部源接收的散列映射中获取的上下文来呈现它。

然而,ERB 的文档指出,ERB.result 方法需要一个binding。我了解到它们是在 ruby​​ 中保存变量上下文的东西(我想是 python 中的 locals()globals() 吧?)。但是,我不知道如何从 HashMap 构建绑定(bind)对象。

一点点(实际上是 很多)谷歌搜索给了我这个:http://refactormycode.com/codes/281-given-a-hash-of-variables-render-an-erb-template ,它使用了一些让我无法理解的 ruby​​ 元编程魔法。

那么,这个问题就没有一个简单的解决方案吗?或者是否有更好的模板引擎(不依赖于 HTML)更适合这个? (我只选择了 ERB,因为它在标准库中)。

最佳答案

require 'erb'
require 'ostruct'

def render(template, vars)
ERB.new(template).result(OpenStruct.new(vars).instance_eval { binding })
end

例如

render("Hey, <%= first_name %> <%= last_name %>", first_name: "James", last_name: "Moriarty")
# => "Hey, James Moriarty"

更新:

一个没有 ERB 的简单例子:

def render(template, vars)
eval template, OpenStruct.new(vars).instance_eval { binding }
end

例如

render '"Hey, #{first_name} #{last_name}"', first_name: "James", last_name: "Moriarty"
# => "Hey, James Moriarty

更新 2:查看下方的 @adam-spiers 评论。

关于ruby - 使用哈希值渲染 ERB 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8954706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com