Как правильно объединить строку и тег?

Я делаю помощник по рельсам для создания кнопки входа с текстом и изображением логотипа. Если я добавлю в качестве содержимого только текст или 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&lt;img src=&quot;/assets/logo.png&quot; /&gt;</a></div>

Как правильно объединить строку и результат content_tag?

1 ответ

Решение

Проблема в том, что конкатенация выполняется при сборке anchor_tag. Вам нужно позвонить html_safe на строковом литерале, чтобы избежать экранирования:

anchor = content_tag :a, "enter by".html_safe + image_tag("logo.png"), :href => '#'
Другие вопросы по тегам