0

当初、オブジェクトの日時などの値に式 (#{}) が埋め込まれた静的文字列を使用するサービスを Rails で構築しました。これらの文字列は、他のユーザーとの通信を構築するために使用されました。

ユーザーが式を埋め込んでデフォルトのテキストをカスタマイズする方法を提供したいと考えています。

それらは現在、モデル、コントローラー、およびビュー全体に散らばっていますが、それらをすべて 1 つの場所に配置したいと考えています (ローカリゼーションと同様ですが、ユーザーごとに異なります)。

最初に考えたのは、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 に答える