Pulsanti di opzione su Rotaie
-
05-07-2019 - |
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?
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