Выполнение нескольких gsub в приложении rails 3 по шаблону тела письма - PullRequest
2 голосов
/ 27 февраля 2012

У меня есть шаблон электронной почты, в который пользователь может ввести текст, подобный этому:

Hello {first_name}, how are you?

, и когда электронное письмо действительно отправляется, оно заменяет текст заполнителя {first_name} на фактическоеvalue.

Однако будет несколько таких заполнителей, и я не был уверен, что gsub предназначен для такого использования.

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

IsЕсть более чистое решение для достижения этой функциональности?Кроме того, если кто-то сделал что-то похожее на это, обнаружили ли они, что они в конечном итоге достигли точки, когда использование нескольких gsub в нескольких абзацах для сотен писем было слишком медленным?

РЕДАКТИРОВАТЬ

Iпровел несколько тестов, сравнивая несколько gsubs с использованием регулярного выражения, и выяснилось, что регулярное выражение обычно в 3 раза быстрее, чем при использовании нескольких gsub.Тем не менее, я думаю, что код регулярного выражения немного сложнее читать как есть, поэтому мне придется немного его почистить, но действительно кажется, что использование регулярного выражения значительно быстрее, чем использование нескольких gsub.Поскольку мой вариант использования будет включать несколько замен для большого количества документов, более быстрое решение будет для меня лучше, хотя мне придется добавить немного больше документации.

1 Ответ

4 голосов
/ 29 февраля 2012

Вы должны поместить в регулярные выражения все строки, которые хотите перехватить, а в хеш вы добавите замену всех перехватчиков:

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

Этот код работает только для ruby ​​1.9.

Если вы можете использовать библиотеку шаблонов, например, erb или haml, они являются подходящим инструментом для выполнения таких задач.

...