0

最初,我们在 Rails 上构建了一个服务,它使用带有嵌入式表达式 (#{}) 的静态字符串来表示对象的日期时间等值。这些字符串用于建立与其他用户的通信。

我们希望为我们的用户提供一种使用嵌入表达式自定义默认文本的方法。

它们目前分散在我们的模型、控制器和视图中,但我们希望将它们全部放在一个地方(如本地化,但每个用户不同)。

我们最初的想法是使用 MongoDB(通过 MongoMapper)创建一个存储字符串的自定义文档。然后我们可以在不进行迁移的情况下不断添加新字符串。

我们会将字符串存储为如下内容:

"Testing out a string at #{object.datetime}."

稍后用户可以使用表单,我们必须编辑这些字符串以供他们使用(与其他用户隔离)。

然后,当我们想要使用字符串时,我们要么将 #{} 替换为一个值,要么以某种方式告诉嵌入的表达式进行计算。

问题:定义后如何计算带有嵌入表达式的字符串?有没有类似 to_sym 的东西来创建符号?

有一个更好的方法吗?

谢谢!

4

2 回答 2

1

您会想要使用或编写自己的模板引擎。通过模板引擎,我的意思很简单:

values = {"foo" => "bar"}
"turn this {{foo}} into bar".gsub(/\{\{.+?\}\}/) do |x|
  values[x[2..-3]]
end

# => "turn this bar into bar"

为此,您可能还喜欢液体或胡须。您可以立即拒绝任何涉及 eval 的解决方案:它们对于不受信任的字符串是不安全的。

至于存储配置值,mongo 似乎很好。

于 2011-04-07T20:11:42.687 回答
0

显然 facets 允许你这样做,使用String.interpolate. 今天早上看这个视频的时候发现了。

于 2011-04-07T23:41:46.227 回答