Ярлыки для радиокнопок в виде рельсов - PullRequest
139 голосов
/ 14 апреля 2009

Мой вопрос похож на этот но для приложения Rails.

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

Например:

<% form_for(@message) do |f| %>
    <%= label :contactmethod %>
    <%= f.radio_button :contactmethod, 'email', :checked => true %> Email
    <%= f.radio_button :contactmethod, 'sms' %> SMS
<% end %>

Это генерирует что-то вроде:

<label for="message_contactmethod">Contactmethod</label>
<input checked="checked" id="message_contactmethod_email" name="message[contactmethod]" value="email" type="radio"> Email
<input id="message_contactmethod_sms" name="message[contactmethod]" value="sms" type="radio"> SMS

Что я хочу:

<input checked="checked" id="message_contactmethod_email" name="message[contactmethod]" value="email" type="radio"><label for="message_contactmethod_email">Email</label>
<input id="message_contactmethod_sms" name="message[contactmethod]" value="sms" type="radio"> <label for="message_contactmethod_sms">SMS</label>

Ответы [ 4 ]

216 голосов
/ 05 ноября 2010

Передача опции :value в f.label обеспечит совпадение атрибута for тега метки с идентификатором соответствующего radio_button

<% form_for(@message) do |f| %>
  <%= f.radio_button :contactmethod, 'email' %> 
  <%= f.label :contactmethod, 'Email', :value => 'email' %>
  <%= f.radio_button :contactmethod, 'sms' %>
  <%= f.label :contactmethod, 'SMS', :value => 'sms' %>
<% end %>

См. ActionView :: Helpers :: FormHelper # label

опция: value, предназначенная для назначения меток для тегов radio_button

137 голосов
/ 14 апреля 2009
<% form_for(@message) do |f| %>
  <%= f.radio_button :contactmethod, 'email', :checked => true %> 
  <%= label :contactmethod_email, 'Email' %>
  <%= f.radio_button :contactmethod, 'sms' %>
  <%= label :contactmethod_sms, 'SMS' %>
<% end %>
1 голос
/ 29 июня 2009

Если вы хотите, чтобы имя_объекта было добавлено к любому идентификатору, вам следует вызвать помощников формы для объекта формы:

- form_for(@message) do |f|
  = f.label :email

Это также гарантирует, что все представленные данные будут сохранены в памяти на случай ошибок проверки и т. Д.

Если вы не можете вызвать метод помощника формы для объекта формы, например, если вы используете помощник тега (radio_button_tag и т. Д.), Вы можете интерполировать имя с помощью:

= radio_button_tag "#{f.object_name}[email]", @message.email

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

0 голосов
/ 04 апреля 2019

Используя true / false в качестве значения, поле будет предварительно заполнено, если для модели, переданной в форму, этот атрибут уже заполнен:

= f.radio_button(:public?, true)
= f.label(:public?, "yes", value: true)
= f.radio_button(:public?, false)
= f.label(:public?, "no", value: false)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...