Как правильно объединить строку и тег?
Я делаю помощник по рельсам для создания кнопки входа с текстом и изображением логотипа. Если я добавлю в качестве содержимого только текст или image_tag, результат будет работать очень хорошо.
def test_helper
anchor = content_tag :a, "enter by", :href => '#'
concat content_tag :div, anchor, :class => 'login'
end
# result:
# <div class="login"><a href="#">enter by</a></div>
def test_helper
anchor = content_tag :a, image_tag("logo.png"), :href => '#'
concat content_tag :div, anchor, :class => 'login'
end
# result:
# <div class="login"><a href="#"><img src="assets/logo.png" /></a></div>
Но когда я пытаюсь передать результат конкатенации, в html source возвращается тег img с escape-символами:
def test_helper
anchor = content_tag :a, "enter by" + image_tag("logo.png"), :href => '#'
concat content_tag :div, anchor, :class => 'login'
end
<div class="login"><a href="#">enter by<img src="/assets/logo.png" /></a></div>
Как правильно объединить строку и результат content_tag?
1 ответ
Решение
Проблема в том, что конкатенация выполняется при сборке anchor_tag. Вам нужно позвонить html_safe
на строковом литерале, чтобы избежать экранирования:
anchor = content_tag :a, "enter by".html_safe + image_tag("logo.png"), :href => '#'