Из того что хоть сколько-нибудь распространено, единственный выход это действительно использовать специальный шаблоноязык — Liquid, Curly, Laminate, наверное ещё какие-нибудь есть.
Альтернативный вариант — использовать штатную функциональность Руби
$SAFE
(
phrogz.net/programmingruby/taint.html), и извращаться под ней рендеринг erb запуская. Готового решения нет, целиком Рельсы даже с
$SAFE=1
не запускаются.
Ну или можно вынести рендеринг шаблонов в отдельный процесс (отдельный на каждого Вашего недоверенного юзера, видимо), с которым общаться через тот или иной RPC-механизм, вплоть до JSON-сервера: туда отправляются данные, нам возвращается отрендеренный html.