Domanda

Simile a questa domanda: Caselle di controllo su rotaie

Qual è il modo corretto di creare pulsanti di opzione correlati a una determinata domanda in Ruby on Rails? Al momento ho:

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

Voglio anche essere in grado di controllare automaticamente gli elementi precedentemente selezionati (se questo modulo è stato ricaricato). Come caricare i parametri nel valore predefinito di questi?

È stato utile?

Soluzione

Come in questo post precedente , con una leggera svolta:

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

Dove

@theme = params[:theme]

Altri suggerimenti

Come V, ma ha etichette associate a ciascun pulsante di opzione. Fare clic sull'etichetta per controllare il pulsante di opzione.

<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, eliminando i tag br inutili e annidando gli input all'interno dell'etichetta in modo che possano essere selezionati senza abbinare le etichette agli ID. Anche usando form_for. Considero che ciò segua le migliori pratiche.

= 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

Suggerirei di dare un'occhiata a formtastic

Rende le raccolte dei pulsanti di opzione e delle caselle di controllo molto più semplici e più concise. Il tuo codice sarebbe simile al seguente:

    <% 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 è in gran parte discreto e può essere miscelato e abbinato al "classico" costruttori di moduli. Puoi anche sovrascrivere la classe css formtastic per il modulo come ho fatto sopra con
    : html = > {: class = > 'My_style'}

Dai un'occhiata ai pertinenti Railscast.

Aggiornamento: di recente sono passato a Simple Form che ha una sintassi simile a formativo ma è più leggero e soprattutto lascia lo stile al tuo css.

Hmm, dai documenti non vedo come puoi impostare l'ID sui pulsanti di opzione ... l'attributo dell'etichetta per cerca di collegarsi all'ID sulla radio.

documenti di rotaie per radio_button_tag

Detto questo, dal documento, che il primo parametro è il "nome" ... che se questo è ciò che sta creando, dovrebbe raggrupparli tutti insieme. In caso contrario, forse è un bug?

Hmm, mi chiedo se questi sono stati corretti: http://dev.rubyonrails.org/ticket/2879 http://dev.rubyonrails.org/ticket/3353

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top