2009-03-08 14 views
57

similares a esta pregunta: Checkboxes on RailsLos botones de radio sobre rieles

Cuál es la forma correcta de hacer botones de radio que están relacionados con una cierta pregunta en Ruby on Rails? En este momento tengo:

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

También quiero poder verificar automáticamente los elementos previamente seleccionados (si este formulario se volvió a cargar). ¿Cómo cargaría los parámetros en el valor predeterminado de estos?

Respuesta

74

Como en this previous post, con un pequeño giro:

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

Dónde

@theme = params[:theme] 
+3

Se podría simplificar '[ 'normal', 'desierto', 'verde', 'corporativa', 'cobarde']' a '% w (llanura desértica corporativa cobarde verde)' ' – gabe

1

Hmm, de los documentos no veo cómo puede establecer la identificación en los botones de radio ... la etiqueta de atributo intenta vincular a la identificación en la radio.

rails docs for radio_button_tag

Dicho esto, desde el doc, que es el primer parámetro "nombre" ... lo que si eso es lo que está creando, debe agruparlos alltogether. Si no, tal vez es un error?

Hmm, se preguntan si estos han sido corregidos: http://dev.rubyonrails.org/ticket/2879 http://dev.rubyonrails.org/ticket/3353

36

Igual V de, pero tiene etiquetas asociadas con cada botón de radio. Al hacer clic en la etiqueta, se comprueba el botón de 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> 
+0

Usando label_tag' ayuda mejorar el UX :) – abhishek77in

4

Yo sugeriría echar un vistazo a formtastic

Hace botón de radio y comprobar colecciones caja sumamente fácil y más concisos. Su código se vería así:

<% 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 es en gran parte discreta y se puede mezclar y combinar con la forma de constructores "clásicos". También puede sustituir la clase css Formtastic de la forma como lo hizo anteriormente con
:html => {:class => 'my_style'}

un vistazo a las Railscasts pertinentes.

Actualización: Recientemente me mudé a Simple Form que tiene una sintaxis similar a formtastic pero es más liviana y sobre todo deja el estilo a su propio css.

8

Usando Haml, eliminando las etiquetas innecesarias de br, y anidando las entradas dentro de la etiqueta para que puedan ser seleccionadas sin etiquetas coincidentes con los identificadores. También usando form_for. Consideraría que esto está siguiendo las mejores prácticas.

= 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 
Cuestiones relacionadas