152 votes

Étiquettes pour les boutons radio sous forme de rails

Ma question est similaire à ce un mais pour une application Rails.

J'ai un formulaire avec quelques boutons radio, et souhaitent associer des étiquettes avec eux. L' label helper form prend seulement un champ de formulaire en tant que paramètre, mais dans ce cas j'ai plusieurs boutons radio pour un seul champ de formulaire. Le seul moyen que je vois pour le faire est de créer manuellement une étiquette, difficile de codage le code qui est généré automatiquement pour le bouton radio. Personne ne sait d'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>

240voto

John Douthat Points 28189

En passant la option pour s’assurera de la balise label attribut est identique à l’id du correspondant

Voir ActionView::Helpers::FormHelper #label

le : valeur de l’option, qui est conçue pour des étiquettes de cible pour les balises radio_button

152voto

Matt Haley Points 1954
<% 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 %>

1voto

James Conroy-Finn Points 146

Si vous voulez le object_name précédé de toute pièce d'identité, vous devez appeler la forme des aides à la forme de l'objet:

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

Cela assure également soumise à des données stockées dans la mémoire devrait-il y avoir des erreurs de validation, etc.

Si vous ne pouvez pas appeler la forme de la méthode d'assistance sur la forme de l'objet, par exemple si vous êtes en utilisant une balise helper (radio_button_tag etc.) vous pouvez interpoler le nom à l'aide:

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

Dans ce cas, vous devez spécifier la valeur manuellement afin de conserver toutes les mémoires.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X