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