Ma question est similaire à celle-ci mais pour un Rails app.
J'ai un formulaire avec des boutons radio et j'aimerais y associer des étiquettes. L'assistant de formulaire label
prend uniquement un champ de formulaire en tant que paramètre, mais dans ce cas, j'ai plusieurs boutons radio pour un seul champ de formulaire. La seule façon pour moi de le faire est de créer manuellement une étiquette, en codant en dur l'ID généré automatiquement pour le bouton radio. Est-ce que quelqu'un connaît une meilleure façon de le faire?
Par exemple:
<% form_for(@message) do |f| %>
<%= label :contactmethod %>
<%= f.radio_button :contactmethod, 'email', :checked => true %> Email
<%= f.radio_button :contactmethod, 'sms' %> SMS
<% end %>
Cela génère quelque chose comme:
<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
Ce que je veux:
<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 %>
En passant le :value
option à f.label
s'assurera que l'attribut for
de la balise est identique à l'id du 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 %>
Voir ActionView :: Helpers :: FormHelper # label
l'option: value, conçue pour cibler les étiquettes pour les balises radio_button
Si vous souhaitez que le nom d'objet soit préfixé par un ID, vous devez appeler des assistants de formulaire sur l'objet de formulaire:
- form_for(@message) do |f|
= f.label :email
Cela garantit également que toutes les données soumises sont stockées en mémoire en cas d'erreur de validation, etc.
Si vous ne pouvez pas appeler la méthode d'assistance de formulaire sur l'objet de formulaire, par exemple si vous utilisez un assistant de balise (radio_button_tag, etc.), vous pouvez interpoler le nom à l'aide de:
= radio_button_tag "#{f.object_name}[email]", @message.email
Dans ce cas, vous devez spécifier la valeur manuellement pour conserver les soumissions.
En utilisant true
/false
comme valeur, le champ sera pré-rempli si le modèle transmis au formulaire a cet attribut déjà rempli:
= f.radio_button(:public?, true)
= f.label(:public?, "yes", value: true)
= f.radio_button(:public?, false)
= f.label(:public?, "no", value: false)