it-swarm.com.de

Optionsfelder auf Rails

Ähnlich zu dieser Frage: Checkboxen auf Schienen

Was ist die richtige Art, Optionsfelder zu erstellen, die sich auf eine bestimmte Frage in Ruby on Rails beziehen? Im Moment habe ich:

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

Ich möchte auch in der Lage sein, die zuvor ausgewählten Elemente automatisch zu überprüfen (wenn dieses Formular erneut geladen wurde). Wie würde ich die Parameter in den Standardwert von diesen laden?

57
alamodey

Wie in dieser vorherige Beitrag , mit einer leichten Drehung:

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

Wo

@theme = params[:theme]
75
vladr

Entspricht V, ist jedoch jedem Optionsfeld eine Beschriftung zugeordnet. Durch Klicken auf die Beschriftung wird das Optionsfeld aktiviert.

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

Verwenden Sie Haml, um unnötige br-Tags zu entfernen und Eingaben innerhalb von label zu verschachteln, damit sie ausgewählt werden können, ohne die Bezeichnungen mit den IDs abzugleichen. Auch mit form_for. Ich würde dies als Best Practices bezeichnen.

= 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
8
Daniel X Moore

Ich würde vorschlagen, einen Blick auf formtastic zu werfen

Dadurch wird die Sammlung von Optionsfeldern und Kontrollkästchen erheblich einfacher und übersichtlicher. Ihr Code würde so aussehen:

    <% 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 ist weitgehend unauffällig und kann mit den "klassischen" Formbuildern gemischt und kombiniert werden. Sie können auch die formtastic css-Klasse für das Formular überschreiben, wie oben beschrieben
:html => {:class => 'my_style'}

Schauen Sie sich die entsprechenden Railscasts an.

Update: Ich bin kürzlich zu Simple Form gewechselt, das eine ähnliche Syntax wie formtastic hat, aber leichter ist und das Styling speziell Ihrer eigenen CSS überlässt.

4
dirkb

Hmm, in den Dokumenten sehe ich nicht, wie Sie die ID auf den Optionsfeldern einstellen können ... Das Attribut des Labels für versucht, eine Verknüpfung mit der ID auf dem Radio herzustellen.

Rails-Dokumente für radio_button_tag

Das heißt, nach dem Dokument ist dieser erste Parameter der "Name" ... was, wenn es das ist, was es erstellt, sie alle zusammen gruppieren sollte . Wenn nicht, ist es vielleicht ein Fehler?

Hmm, ich frage mich, ob diese behoben wurden: http://dev.rubyonrails.org/ticket/2879http://dev.rubyonrails.org/ticket/335

1
scunliffe