Link_to в помощнике с блоком - программирование

Link_to в помощнике с блоком

Я пытаюсь заставить это работать:

link_to("#", class: "add_fields btn btn-success") do
  name
  content_tag(:i, "", :class => "icon-plus icon-white")
end

но только показывает мне значок, указанный i (twitter-bootstrap css), а не текст в name, что я делаю неправильно?

4b9b3361

Ответ 1

Возвращаемое значение блока становится его содержимым. Возвращается только последняя строка.

Вы должны объединить две строки вместе с + для получения единственного возвращаемого значения:

link_to("#", class: "add_fields btn btn-success") do
  name + content_tag(:i, "", class: "icon-plus icon-white")
end

Вам нужно использовать html_safe для предотвращения автоматического кодирования содержимого вашего тега:

link_to("#", class: "add_fields btn btn-success") do
  name + content_tag(:i, "", class: "icon-plus icon-white").html_safe
end

Говоря из личного опыта работы с Twitter Bootstrap, я знаю, что вам понадобится пробел между name и content_tag:

link_to("#", class: "add_fields btn btn-success") do
  name + ' ' + content_tag(:i, "", class: "icon-plus icon-white").html_safe
end

В качестве альтернативы, если вы находитесь внутри шаблона ERB, вы можете вывести оба значения с помощью <%=:

<%= link_to( ... ) do %>
  <%= name %>
  <%= content_tag( ... ) %>
<% end %>

Ответ 2

Есть две вещи, которые я бы подумал:

1) Все содержимое блока link_to необходимо очистить.

link_to("#", class: "add_fields btn btn-success") do
  (name + content_tag(:i, "", class: "icon-plus icon-white")).html_safe
end

2) Можно ли ожидать, что ввод будет nil?

Вещи разрываются, если мы вызываем html_safe на объект nil. Используйте raw, если есть вероятность, что это может произойти.

link_to("#", class: "add_fields btn btn-success") do
  raw(name + content_tag(:i, "", class: "icon-plus icon-white"))
end

Это хорошо читается по этому вопросу. Мой пост в блоге представляет интересное приложение этого.

Ответ 3

Для тех, кто использует шрифт-awesome или что-то еще, он может не показывать значок. Но это решение сработало.

link_to :sort => column, :direction => direction do
   "#{title} #{content_tag(:i, "", class: "fa fa-chevron-up") }".html_safe
end