Botones de radio en rieles
-
05-07-2019 - |
Pregunta
Similar a esta pregunta: Casillas de verificación en los rieles
¿Cuál es la forma correcta de crear botones de radio relacionados con una determinada pregunta en Ruby on Rails? Por el 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 seleccionados previamente (si este formulario fue recargado). ¿Cómo cargaría los parámetros en el valor predeterminado de estos?
Solución
Como en esta publicación anterior , con un ligero 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>
Donde
@theme = params[:theme]
Otros consejos
Igual que V's, pero tiene etiquetas asociadas con cada botón de opción. Al hacer clic en la etiqueta, se marca el botón de opción.
<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>
Usar Haml, deshacerse de etiquetas br innecesarias y anidar entradas dentro de la etiqueta para que puedan seleccionarse sin que coincidan las etiquetas con las ID. También usando form_for. Consideraría que esto sigue 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
Sugeriría echar un vistazo a formtastic
Hace que las colecciones de botones de radio y casillas de verificación sean mucho más fáciles y concisas. Tu 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 bastante discreto y se puede mezclar y combinar con el " clásico " formadores de formularios. También puede anular la clase css formtastic para el formulario como lo hice anteriormente con
: html = > {: class = > 'my_style'}
Eche un vistazo a los Railscasts pertinentes.
Actualización: Recientemente me mudé a Formulario simple que tiene una sintaxis similar a Formtastic, pero es más ligero y, sobre todo, deja el estilo a tu propio CSS.
Hmm, en los documentos no veo cómo se puede establecer la ID en los botones de radio ... la etiqueta para el atributo intenta vincular a la ID en la radio.
documentos de rails para radio_button_tag
Dicho esto, desde el documento, ese primer parámetro es el " nombre " ... que si eso es lo que está creando, debería agruparlos por completo. Si no, tal vez sea un error?
Hmm, me pregunto si se han solucionado: http://dev.rubyonrails.org/ticket/2879 http://dev.rubyonrails.org/ticket/3353