gpt4 book ai didi

ruby-on-rails - 在 Ruby 中为动态变量创建占位符标记

转载 作者:数据小太阳 更新时间:2023-10-29 08:35:52 26 4
gpt4 key购买 nike

我正在寻找一种方法来定义一组占位符/合并标记或实现 DSL,其中 View 文件中使用的一组模板标记将动态替换条件变量值。

例如模板可能是这样的:

The quick <<COLOR>> <<ANIMAL_1>> jumps over the lazy <<ANIMAL_2>>

当然输出结果是:

The quick brown fox jumps over the lazy dog

这超出了在 ERB 模板中使用 <%= animal.color %> 的范围。在这种情况下,理想情况下,用户应该能够在表单输入中使用这些标签,标签别名与数据库中的其余文本一起保存。

我不确定如何引用这些标签,所以这里有一个来自 Mandrill 文档的关于它们自己的“合并标签”功能的示例:How to Use Merge Tags to Add Dynamic Content

是否有任何现有的 gem 可以做到这一点?如果没有,我该如何实现类似的东西?

最佳答案

这是先前 answer 的改编版本.给定一个 String 和一个 Hash,expand 方法只是用 sub 迭代,直到找不到更多的占位符。

class String
def has_placeholder?
self=~/<<\w+>>/
end
end

wordbook = {
"<<COLOR>>"=> "brown",
"<<ANIMAL_1>>"=> "fox",
"<<ANIMAL_2>>"=> "dog"
}

def expand(sentence, wordbook)
while sentence.has_placeholder? do
sentence.sub!(/(<<\w+>>)/){wordbook[$1]}
end
sentence
end

puts expand("The quick <<COLOR>> <<ANIMAL_1>> jumps over the lazy <<ANIMAL_2>>", wordbook)
#=> The quick brown fox jumps over the lazy dog

也可以有嵌套的占位符:

wordbook = {
"<<ADJECTIVE_1>>"=> "quick",
"<<ADJECTIVE_2>>"=> "lazy",
"<<COLOR>>"=> "brown",
"<<ANIMAL_1>>"=> "<<ADJECTIVE_1>> <<COLOR>> fox",
"<<ANIMAL_2>>"=> "the <<ADJECTIVE_2>> dog"
}

puts expand("The <<ANIMAL_1>> jumps over <<ANIMAL_2>>.", wordbook)
#=> The quick brown fox jumps over the lazy dog.

如果你有兴趣,链接 answer从多种可能性中随机选择一个字符串。

关于ruby-on-rails - 在 Ruby 中为动态变量创建占位符标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41666646/

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