2012-02-27 19 views
2

我有一個電子郵件模板3的應用程序,用戶可以在這樣的輸入文字:做多GSUB在鐵軌上的電子郵件正文模板

Hello {first_name}, how are you?

,當電子郵件實際被髮送替代佔位符文本{first_name}與實際值。

雖然會有幾個佔位符,但我不確定這個gsub是否應該像這樣使用。

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

是否有一個清潔的解決方案來實現這一功能呢?另外,如果有人做了類似的事情,他們是否發現他們最終達到了在幾百個電子郵件上使用多個gsubs的速度太慢?

編輯

我進行了一些測試,比較多gsubs VS使用正則表達式,它出來的正則表達式,通常是3倍比使用多個gsubs更快。然而,我認爲正則表達式代碼更難讀,所以我將不得不將它清理一下,但確實使用正則表達式確實比多個gsub快得多。由於我的用例會涉及多個文檔的替換,所以對於我來說更快的解決方案會更好,即使我必須添加更多文檔。

回答

4

你必須把正則表達式你想趕上所有字符串,並在哈希你把全部替換漁獲:

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

此代碼僅適用於紅寶石1.9。

如果你可以使用像erb或haml這樣的模板庫,它們是這類任務的合適工具。

+0

有趣;這會比做多個gsub更有效率嗎?我想從可讀性的角度來看,多個gsub對於其他人看我的代碼會更容易理解。使用正則表達式方法與多個gsub有什麼其他好處? – 2012-02-29 16:49:55

+0

我發現這個解決方案比多個gsub快得多。希望閱讀起來更「乾淨」,但速度好處在於爲其他開發人員編寫一些文檔。謝謝! – 2012-02-29 17:09:02