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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top