web-dev-qa-db-fra.com

Boutons radio sur Rails

Similaire à cette question: cases à cocher sur les rails

Quelle est la bonne façon de créer des boutons radio liés à une certaine question dans Ruby on Rails? Pour le moment, 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 veux également pouvoir vérifier automatiquement les éléments précédemment sélectionnés (si ce formulaire a été rechargé). Comment pourrais-je charger les paramètres dans leur valeur par défaut?

57
alamodey

Comme dans ce post précédent , avec une légère torsion:

<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]
75
vladr

Identique aux V, mais a des étiquettes associées à chaque bouton radio. Cliquer sur l'étiquette vérifie le bouton radio.

<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>
37
dazonic

Utiliser Haml, se débarrasser des balises br inutiles et imbriquer les entrées dans l'étiquette afin qu'elles puissent être sélectionnées sans faire correspondre les étiquettes aux id. Utilisant également form_for. Je considérerais que cela suit les 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
8
Daniel X Moore

Je suggère de jeter un œ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 en grande partie discret et peut être mélangé et assorti avec les constructeurs de formulaires "classiques". Vous pouvez également remplacer la classe CSS formtastic pour le formulaire comme je l'ai fait ci-dessus avec
:html => {:class => 'my_style'}

Jetez un œil aux diffusions pertinentes.

Mise à jour: je suis récemment passé à Simple Form qui a une syntaxe similaire à formtastic mais est plus léger et laisse surtout le style à votre propre CSS.

4
dirkb

Hmm, d'après les documents, je ne vois pas comment vous pouvez définir l'ID sur les boutons radio ... l'attribut for de l'étiquette essaie de se lier à l'ID sur la radio.

Documents Rails pour radio_button_tag

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

Hmm, je me demande si ceux-ci ont été corrigés: http://dev.rubyonrails.org/ticket/2879http://dev.rubyonrails.org/ticket/335

1
scunliffe