rails 3 link_to с вложенным content_tag для создания <href с вложенным span - как? - PullRequest
10 голосов
/ 10 марта 2012

Привет, у меня вопрос noob, я хочу создать следующий результат HTML:

<a href="/controller/action" class="button-big layer">TEXT<span class="arrow-big"></span></a>

В приведенном выше HTML-коде я хочу иметь текст с классом span для стилизации изображения с помощью CSS.

Когда я пробую следующие реализации, результат отражает только одну часть необходимой реализации:

<%= link_to "TEXT", controller_path, :class => "button-big layer" %>

Результат:

<a href="/controller/action" class="button-big layer">TEXT</a>

и

<%= link_to(content_tag(:span, "", :class => "arrow-big"), controller_path, :class => "button-big layer") %>

Результат:

<a href="/controller/action" class="button-big layer"><span class="arrow-big"></span></a>

Кто-нибудь знает, как это сделать?

Ответы [ 4 ]

29 голосов
/ 10 марта 2012

Вы также можете вкладывать теги, используя альтернативный синтаксис для link_to helper

<%= link_to controller_path, :class=> "button-big layer" do %>
  Text
  <%= content_tag(:span, "", :class => "arrow_big" %>
<% end %>
10 голосов
/ 10 марта 2012

Просто объедините ваш текст с помощью 'span':

<%= link_to(("TEXT" + content_tag(:span, "", :class => "arrow-big")).html_safe,
             controller_path,
             :class => "button-big layer") %>

Вам понадобится .html_safe для конкатенации, так как в противном случае оператор + будет экранировать HTML-код content_tag.

2 голосов
/ 16 сентября 2015

Читая ваш вопрос, я решил свою проблему. Чем я предлагаю другой способ ответить на ваш вопрос.

Вы можете создать вспомогательный метод, чтобы создать такую ​​ссылку, которая вам нужна. Было бы что-то вроде этого

def link_with_text_and_span(href, text, span_options= {}, link_options = {})
    span_tag = content_tag(:span, span_options[:content] || '', :class => span_options[:class] || '')
    link_to(span_tag, href, :class => link_options[:class] || '')
  end

Хорошо, что ваш взгляд будет чище. Тогда вы можете просто вызвать этот вспомогательный метод в вашем представлении

  <%= link_with_text_and_span("/controller/action", "TEXT", {class: 'arrow-big'}, class: button-big) %>

PS: Этот код можно улучшить, если другие пользователи захотят, пожалуйста, сделайте это.

2 голосов
/ 15 сентября 2013

Вот еще один способ, которым вы можете использовать без тега content_tag. Не самый чистый, но это работает!

<%= link_to '<span class="arrow_big"></span>'.html_safe, controller_path, class: "button-big layer" %>
...