Rails 3.2 использует content_tag для генерации кнопки "Удалить" с иконками twitter-bootstrap

В этом примере я пытаюсь воспроизвести значок кнопки "Удалить", используя метод content_tag в Rails 3, во вложенной форме и ненавязчиво используя jQuery (или, по крайней мере, надеюсь на это).

Значок кнопки удаления Twitter-Bootstrap (пример)

HTML, полученный при проверке с Firebug, приведен ниже.

<a class="btn btn-danger" href="#">
  <i class="icon-trash icon-white"></i>
  Delete
</a>

Я использую следующее для создания кнопки со значком, но не могу добавить к ней "Удалить ингредиенты", и при этом я не получаю "#" для ссылки.

Вот мой код из части ингредиентов:

<%= link_to content_tag(:a, content_tag(:i, '', class: "icon-trash icon-white"), class: "btn btn-danger remove_fields") %>

Это создает:

<a class="btn btn-danger remove_fields">
  <i class=icon-trash icon-white"></i>
</a>

Это было основано на информации от док-станции Api - content_tag

который имел следующий пример кода:

content_tag(:div, content_tag(:p, "Hello world!"), :class => "strong")
# => <div class="strong"><p>Hello world!</p></div>

Может ли кто-нибудь любезно указать мне правильное направление? Почему я упускаю детали, которые я упомянул выше?

Примечание: я могу заставить это работать с блоком link_to, но хотел знать, можно ли это сделать в одну строку без do..end и, что более важно, в методе content_for.

<%= link_to('#', class: "btn btn-danger remove_fields") do %>
  <i class: "icon-trash icon-white"></i>
  Delete
<% end %>

2 ответа

<%= link_to(body, url, html_options = {}) %>

Итак, ваш запрос в 1 строку:

<%= link_to content_tag(:i, "", class: "icon-trash icon-white") + "Delete", path_to_stuff, method: :delete, class: "btn btn-danger remove_fields" %>

Самая сложная часть - это "тело". Вам просто нужно помнить, что все эти помощники content_tag (включая link_to и другие) возвращают строку.

НО это безобразно И долго. И трудно поддерживать. Таким образом, предложенное вами решение, которое занимает блок, намного лучше.

Почему бы просто не сделать метод помощника вида

def link_to_delete
  link_to %{<i class="icon-trash icon-white"></i> Delete}, '#', class: "btn btn-danger remove_fields" 
end

затем назовите это в ваших взглядах с link_to_delete

хотя зачем тебе это надо чтобы ссылка была

def delete_button
  %{<span class="btn btn-danger remove_fields"><i class="icon-trash icon-white"></i> Delete</span>}
end

Мне не нравится это с content_for, но:

content_tag(:span, %{#{content_tag(:i, nil, :class => "icon-trash icon-white")} Delete}.html_safe, :class => "btn btn-danger remove_fields")

если вы хотите это с тегом, просто измените :span в :a

Другие вопросы по тегам