Ответ 1
<% 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 %>
Мой вопрос похож на этот но для приложения 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>
<% 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 %>
Передача параметра :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
параметр: значение, которое предназначено для целевых ярлыков для тегов radio_button
Если вы хотите, чтобы имя_объекта, префиксное к любому ID, вы должны вызывать бланки формы формы на объекте формы:
- form_for(@message) do |f|
= f.label :email
Это также гарантирует, что любые представленные данные будут сохранены в памяти, если будут какие-либо ошибки проверки и т.д.
Если вы не можете вызвать метод-помощник формы в объекте формы, например, если вы используете помощник тега (radio_button_tag и т.д.), вы можете интерполировать имя, используя:
= radio_button_tag "#{f.object_name}[email]", @message.email
В этом случае вам нужно будет указать значение вручную, чтобы сохранить любые представления.