В чем разница между FormHelper :: label и FormTagHelper :: label_tag? - PullRequest
9 голосов
/ 18 июня 2009

Я пишу форму, которая имеет дело с несколькими моделями. Некоторые примеры того, как это сделать, используют ActionView :: Helpers :: FormHelper :: label , а некоторые используют ActionView :: Helpers :: FormTagHelper :: label_tag , а я нет действительно понимаю разницу.

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

<% form_for :post, :url => { :action => 'create' } do %>
  <p>
    <%= label_tag 'post_type' %><br />
    <%= text_field :post, :post_type %>
  </p>
  <p>
    <%= label :post, :parent_post_id %><br />
    <%= text_field :post, :parent_post_id %>
  </p>
  ...

Визуализирует:

  <p>
    <label for="post_type">Post type</label><br />
    <input id="post_post_type" name="post[post_type]" size="30" type="text" />
  </p>
  <p>
    <label for="post_parent_post_id">Parent post</label><br />
    <input id="post_parent_post_id" name="post[parent_post_id]" size="30" type="text" />
  </p>

Помощник по меткам может показаться более полезным, потому что, вероятно, есть некоторые дополнительные вещи, которые он может сделать, потому что он знает модель и свойство, которое он помечает, но я не могу найти ничего, что могло бы это подтвердить. Есть ли практическая разница между ними? Когда мне следует использовать одного помощника вместо другого?

Ответы [ 2 ]

12 голосов
/ 18 июня 2009

Rails предоставляет два типа помощников форм: те, которые работают конкретно с атрибутами модели, и те, которые не работают. Помощники * _tag предназначены для создания тегов форм, которые не зависят от объекта Active Record, назначаемого шаблону.

Несмотря на то, что нет никакой разницы в сгенерированной разметке для элемента label, как вы показали, в вашем случае вы должны использовать помощник формы label, чтобы соответствовать использованию других помощников формы и потому что он автоматически устанавливает для атрибута for правильный идентификатор связанного элемента текстового поля.

2 голосов
/ 11 ноября 2013

Используйте f.label, когда вы находитесь внутри объекта формы, созданного с помощью form_for(...) do |f|, и хотите сослаться на атрибут модели. Если ваше приложение i18n-ed, Rails будет использовать перевод для отображения имени атрибута.

Используйте label_tag, когда вы не находитесь в объекте формы. (Или вы находитесь в объекте формы, но хотите создать фиктивную метку для немодельного атрибута.)

Все входы формы имеют эти два варианта, с суффиксом _tag и без него, например select и select_tag и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...