Недостатком использования ERB для общей интерполяции строк является то, что ERB действительно нацелен на генерацию HTML. Результатом будет множество проблем с кодировкой, когда вы забудете все уточнить и запутаетесь, почему ваши символы амперсандов, больше, меньше и т. Д. Искажены.
Я думаю, что для ERB будет больше вычислительных затрат, но это может не иметь значения.
Более того, если вы поместите встроенный ERB внутри Ruby, вы получите Ruby внутри ERB внутри Ruby (и, возможно, больше уровней при вызове методов из ERB), и это будет немного запутанным беспорядком. Подумайте о бедных душах, которым придется поддерживать ваш код, сказал, что бедная душа может быть даже вами.
ОБНОВЛЕНИЕ : Вы можете использовать #{}
для простых шаблонов HTML (см. Усы для чего-то подобного), но было бы сложно и довольно уродливо создать повторяющийся раздел; повторяющиеся разделы довольно часто встречаются в шаблонах HTML, поэтому они должны быть простыми и естественными для системы шаблонов HTML. С помощью ERB вы можете просто:
<% a.each do |e| %>
<!-- ... -->
<% end %>
но это будет беспорядок в #{}
интерполяции. Вы также в конечном итоге будете делать #{html(blahblah)}
все время, и большинство людей забудут.
Кроме того, «#» имеет особое значение в URL-адресах и другое специальное значение в CSS (где фигурные скобки также имеют особое значение); URL-фрагменты и фрагменты CSS довольно часто встречаются в шаблонах HTML, поэтому вы будете постоянно беспокоиться о путанице. Эта особенная неприятность, вероятно, будет проблемой только при использовании #{}
для создания селектора CSS или фрагмента в URL, но этого достаточно, чтобы сделать его громоздким.