Если ваши теги представляют собой простые буквенно-цифровые строки (то есть ничего, что не должно быть в кодировке HTML или URL), то вы можете сделать что-то вроде этого:
s = ERB::Util.html_escape(text_to_be_linkified).gsub(/#(\w+)/, '<a href="search?q=\1">\1</a>').html_safe
Тогда s.html_safe?
будет истинным и <%= ... %>
будет передавать результат как есть.Если вы поместите это в помощник вида, вам не понадобится префикс ERB::Util.
для html_escape
.Если вам нужно беспокоиться о кодировке URL или HTML, вы можете соответствующим образом изменить строку замены gsub
.
Например:
> s = ERB::Util.html_escape('<pancakes & #things').gsub(/#(\w+)/, '<a href="search?q=\1">\1</a>').html_safe
> puts s.html_safe?
true
> puts s
<pancakes & <a href="search?q=things">things</a>