Rádio botões no Rails
-
05-07-2019 - |
Pergunta
Semelhante a esta pergunta: Checkboxes on Rails
O que é a maneira correta de fazer botões de rádio que estão relacionados a uma determinada questão em Ruby on Rails? No momento eu tenho:
<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>
Eu também quero ser capaz de verificar automaticamente os itens previamente selecionados (se esta forma foi re-carregado). Como eu iria carregar os parâmetros para o valor padrão desses?
Solução
Como em este post anterior, com uma leve torção:
<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>
Onde
@theme = params[:theme]
Outras dicas
Mesmo como V de, mas tem associado etiquetas com cada botão de rádio. Clicando no rótulo cheques no botão de opção.
<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>
Usando Haml, se livrar de tags BR desnecessários e entradas de nidificação dentro rótulo, para que possam ser selecionado sem correspondência rótulos para ids. Também usando form_for. Eu consideraria isso estar a seguir as melhores práticas.
= 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
Eu gostaria de sugerir ter um olhar para Formtastic
Faz botão de rádio e coleções de caixa de seleção muito mais fácil e mais concisa. Seu código ficaria assim:
<% 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 é em grande parte discretos e podem ser misturados e combinados com os "clássicos" construtores de formulários. Você também pode substituir a classe css Formtastic para a forma como eu fiz acima com
:html => {:class => 'my_style'}
Tenha uma olhada nas Railscasts pertinentes.
Update: Eu recentemente movido para formulário simples que tem sintaxe semelhante à Formtastic, mas é mais leve e, especialmente, deixa o styling para o seu próprio css.
Hmm, desde os docs eu não vejo como você pode definir o ID nos botões de rádio ... o rótulo é para tentativas de atributos de link para o ID do rádio.
trilhos docs para radio_button_tag
Dito isso, a partir do doc, que primeiro param é o "nome" ... que se é isso que ele está criando, deve agrupá-los todos juntos. Se não, talvez um bug?
Hmm, maravilha se estes foram corrigidos: http://dev.rubyonrails.org/ticket/2879 http://dev.rubyonrails.org/ticket/3353