58 votes

Boutons radio sur Rails

Similaire à cette question : http://stackoverflow.com/questions/621340/checkboxes-on-rails

Quelle est la bonne façon de créer des boutons radio liés à une certaine question en Ruby on Rails ? Pour l'instant, j'ai :

<div class="form_row">
    <label for="theme">Theme:</label>
    <br><%= radio_button_tag 'theme', 'plain', true %> Plain
    <br><%= radio_button_tag 'theme', 'desert' %> Desert
    <br><%= radio_button_tag 'theme', 'green' %> Green
    <br><%= radio_button_tag 'theme', 'corporate' %> Corporate
    <br><%= radio_button_tag 'theme', 'funky' %> Funky
</div>

Je souhaite également pouvoir vérifier automatiquement les éléments précédemment sélectionnés (si ce formulaire a été rechargé). Comment puis-je charger les paramètres dans la valeur par défaut de ces éléments ?

75voto

vladr Points 34562

Comme dans ce poste précédent avec un léger twist :

<div class="form_row">
    <label for="theme">Theme:</label>
    <% [ 'plain', 'desert', 'green', 'corporate', 'funky' ].each do |theme| %>
      <br><%= radio_button_tag 'theme', theme, @theme == theme %>
      <%= theme.humanize %>
    <% end %>
</div>

@theme = params[:theme]

38voto

dazonic Points 555

Identique à celui de V, mais avec des étiquettes associées à chaque bouton radio. En cliquant sur l'étiquette, le bouton radio est activé.

<div class="form_row">
  <p>Theme:</p>
  <% [ 'plain', 'desert', 'green', 'corporate', 'funky' ].each do |theme| %>
    <br><%= radio_button_tag 'theme', theme, @theme == theme %>
    <%= label_tag "theme_#{theme}", theme.humanize %>
  <% end %>
</div>

8voto

Daniel X Moore Points 6026

En utilisant Haml, en se débarrassant des balises br inutiles et en imbriquant les entrées dans les étiquettes afin qu'elles puissent être sélectionnées sans faire correspondre les étiquettes aux identifiants. J'utilise également form_for. Je considère que cela correspond aux meilleures pratiques.

= form_for current_user do |form|
  .form_row
    %label Theme:
    - [ 'plain', 'desert', 'green', 'corporate', 'funky' ].each do |theme|
      %label
        = form.radio_button(:theme, theme)
        = theme.humanize

4voto

dirkb Points 353

Je vous suggère de jeter un coup d'œil à formtastic

Il rend les collections de boutons radio et de cases à cocher beaucoup plus faciles et plus concises. Votre code ressemblerait à ceci :

    <% semantic_form_for @widget, :html => {:class => 'my_style'} do |f| %>
<%= f.input :theme, :as => :radio, :label => "Theme:", 
:collection =>  [ 'plain', 'desert', 'green', 'corporate', 'funky' ] %>
<% end %>

Formtastic est très discret et peut être mélangé avec les constructeurs de formulaires "classiques". Vous pouvez aussi remplacer la classe css de Formtastic pour le formulaire comme je l'ai fait ci-dessus avec
:html => {:class => 'my_style'}

Jetez un coup d'œil aux Railscasts pertinents.

Mise à jour : J'ai récemment déménagé à Forme simple qui a une syntaxe similaire à celle de formtastic mais est plus léger et laisse surtout le style à votre propre css.

1voto

scunliffe Points 30964

Hmm, d'après la documentation, je ne vois pas comment vous pouvez définir l'ID des boutons radio... l'attribut for de l'étiquette essaie d'établir un lien avec l'ID de la radio.

documentation sur les rails pour radio_button_tag

Cela dit, d'après la documentation, le premier paramètre est le "nom"... si c'est ce qu'il crée, debe les regrouper tous ensemble. Sinon, c'est peut-être un bug ?

Hmm, je me demande si elles ont été corrigées : http://dev.rubyonrails.org/ticket/2879 http://dev.rubyonrails.org/ticket/3353

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