2012-02-27 15 views
2

電子メールの本文のテンプレート上の3アプリを複数のGSUBを行います{first_name}に実際の値を指定します。レールに私は電子メールのテンプレートを持っている

これらのプレースホルダーがいくつかありますが、gsubがこのように使用されることは確実ではありませんでした。

body = @email.body.gsub("{first_name}", @person.first_name)gsub("{last_name}", @person.last_name).gsub("",...).gsub("",...).gsub("",...).etc...

この機能を達成するためにクリーンな解決策はありますか?また、誰かがこれに似たようなことをした場合、数百の電子メールのためにいくつかの段落で複数のgsubを使うのが遅すぎるという結果に終わりましたか?

EDIT

私は正規表現を使用して対複数gsubsを比較するいくつかのテストを実行し、それが正規表現は、通常、複数のgsubsを使用するよりも3倍速かったことを出てきました。しかし、私は正規表現のコードは現状で読むのが難しいと思うので、ちょっときれいにする必要がありますが、実際には正規表現を使うと複数のgsubよりもかなり速くなるようです。私のユースケースでは、多数のドキュメントを複数回置換する必要があるため、ドキュメントをもう少し追加する必要がありますが、高速なソリューションが優れています。

答えて

4

あなたは正規表現であなたがキャッチしたいとハッシュにあなたはすべての漁獲量の交換を入れて、すべての文字列を配置する必要があります:

"123456789".gsub /(123|456)/, "123" => "ABC", 
           "456" => "DEF" 

このコードのみルビー1.9で動作します。

erbやhamlなどのテンプレートライブラリを使用できる場合は、このようなタスクのための適切なツールです。

+0

興味深い。これは、複数のgsubを実行するよりも効率的になるでしょうか?私は、読みやすさの観点から、複数のgsubが私のコードを見ている他の人にとっては理解しやすいと思っています。正規表現アプローチと複数のgsubsを使用することに他の利点はありますか? –

+0

このソリューションは、複数のgsubsよりもはるかに高速であることがわかりました。読んだほうが「きれい」であることを願っていますが、速度のメリットは他の開発者のためにいくつかの文書を書くことに重大な影響を与えます。ありがとう! –

関連する問題