Передача блока для пометки помощника в рельсах3 - PullRequest
6 голосов
/ 22 мая 2011

Я хочу создать метку с несколькими вложенными элементами. Я использую помощник по меткам и пытаюсь передать внутренний HTML как блок, но сгенерированный HTML не выглядит так, как я ожидал. Еврорадио:

<span>Span element</span>
<%= label("object", "method") do %>
  <span>Inner span</span>
<% end %>

Вывод HTML:

<span>Span element</span> 
<span>Inner span</span> 

<label for="object_method">
<span>Span element</span> 
  <span>Inner span</span> 
</label>

Когда я передаю внутренний html-файл с использованием <%%> разметки, вывод должен быть таким:
ERB:

<span>Span element</span>
<%= label("object", "method") do %>
  <% raw '<span>Inner span</span>' %>
<% end %>

Вывод HTML:

<span>Span element</span>
<label for="object_method">
  <span>Inner span</span>
</label>

Мне интересно, является ли это моей ошибкой или ошибкой в ​​помощнике по меткам ActionView. Для других помощников прохождение блока отлично работает.

Спасибо, Михал

Ответы [ 3 ]

10 голосов
/ 22 мая 2011

Насколько я понимаю, вам нужно использовать помощник label_tag в этом случае:

<%= label_tag "my_label_name" do %>
  <span>Inner span</span>
<% end %>

Причина этого в том, что хотя помощник метки формы заполняет для вас атрибут "for" (используяатрибут объекта модели), он вам не нужен с вложенными элементами.

Если у вас есть открытый ярлык (а не самозакрывающийся), который оборачивает внутреннее содержимое, атрибут «for» не нуженпотому что метка, очевидно, связана с вложенным контентом (это называется неявной ассоциацией).

Итак, это ожидаемое поведение - похоже, команда Rails специально создала его таким образом.

4 голосов
/ 11 июня 2012

Ответ Скотта Лоу верен, хотя я бы сделал еще один шаг вперед ... Вам даже не нужно использовать Rails label_tag для этого. Просто используйте сырой HTML, например, так:

<label>
  <span>Inner span</span>
</label>

Если вы ассоциируете метку с элементом формы (например, с радио-кнопкой):

<label>
  <%= f.radio_button :approval_state, 'R' %>
  Rejected
</label>
1 голос
/ 02 марта 2013

В Rails 3.2.11 это работает для меня:

<span>Span element</span>
<%= label :item, :method do %>
  <span>Inner span</span>
<% end %>

Результат:

<span>Span element</span>
<label for="item_method">
  <span>Inner span</span>
</label>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...