2011-04-07 3 views
0

元は、オブジェクトのdatetimeなどの値に式(#{})を埋め込んだ静的文字列を使用するサービスをRailsで構築しました。これらの文字列は、他のユーザーとの通信を構築するために使用されました。埋め込み式で後で解釈される文字列をユーザーがカスタマイズできるようにする

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

これらは現在、モデル、コントローラ、ビューに散在していますが、ローカライゼーションのようにすべて1か所に配置したいと考えています(ユーザーごとに異なります)。

最初の考えは、MongoMapperを使ってMongoDBを使用して、文字列を格納するカスタマイズ文書を作成することです。次に、移行を行わずに新しい文字列を継続的に追加することができます。

我々はこのようなものとして文字列を格納します:

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

その後、ユーザは、我々はそれらを使用するため、これらの文字列を編集する必要がフォームを使用することができます(他のユーザーから分離)。

文字列を使用する場合は、#{}を値に置き換えるか、何らかの形で埋め込み式の評価を行います。

質問:埋め込み式が定義されている文字列を後でどのように計算するのですか?シンボル作成のためのto_symのようなものがありますか?

これを行うより良い方法はありますか?

ありがとうございます!

+0

埋め込み式はどのくらい複雑になりますか?それはRubyですか?サブセット?補間する値はどのように渡されますか? –

+0

一般的には、object.nameとobject.lengthのようなものになります。 datetime形式のように複雑になる可能性があります。すべての式はRubyで許可されます。私はドキュメントから文字列を取得すると、おそらく名前付きハッシュとしてオブジェクト内を渡します。 –

答えて

1

独自のテンプレートエンジンを使用するか、書きたいと思うでしょう。また、この目的のために、液体やヒゲなどの

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

# => "turn this bar into bar" 

かもしれません:そしてエンジンをテンプレート化することによって、私はような単純なものを意味します。 evalを含むソリューションは、信頼できない文字列では安全ではありません。

設定値を保存する限り、mongoはうまくいくようです。

+0

優れています。 1つの編集: 'values [x [2 ..- 3]]行で括弧を削除する必要があります。これで十分でないなら、私は液体と口ひげを見ます... –

0

ファセットは、String.interpolateを使用してこれを行うことができます。今朝、this videoを見ながら私はそれに出くわしました。