Выполнение нескольких gsub в приложении rails 3 на шаблоне тела электронной почты


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

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...

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

Править

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

1 ответ:

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

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

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

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