Мой вопрос похож на этот, но для приложения 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>
ruby-on-rails
forms
Bryan
источник
источник
:value
опцииf.label
делает то же самое. например<%= f.label :contactmethod, 'SMS', :value => 'sms' %>
. Это правильно устанавливает атрибут «for» тега label, что позволяет щелкнуть метку и выбрать соответствующий переключатель. В ответе выше простое использованиеlabel
помощника приведет к тому, что атрибут «for» будет неверным при создании переключателя с помощью FormBuilderchecked
условную установку значения stackoverflow.com/a/4708921/429521Передача
:value
опцииf.label
гарантирует, чтоfor
атрибут метки тега совпадает с идентификатором соответствующегоradio_button
Смотрите ActionView :: Helpers :: FormHelper # label
источник
field_with_errors
div при необходимости (который не отображается при использовании:contactmethod_email
метода). Это правильный ответ!Если вы хотите, чтобы имя_объекта было добавлено к любому идентификатору, вам следует вызвать помощников формы для объекта формы:
Это также гарантирует, что любые представленные данные будут сохранены в памяти на случай ошибок валидации и т. Д.
Если вы не можете вызвать вспомогательный метод формы для объекта формы, например, если вы используете вспомогательный тег (radio_button_tag и т. Д.), Вы можете интерполировать имя с помощью:
В этом случае вам нужно будет указать значение вручную, чтобы сохранить любые отправленные материалы.
источник
При использовании
true
/false
в качестве значения будет предварительно заполнено поле, если переданная в форму модель имеет этот атрибут уже заполненным:источник
Этот пример из моего проекта для рейтинга с помощью
radio
кнопок и егоlabel
Sисточник