Meine Frage ist ähnlich wie diese, aber für eine Rails-App.
Ich habe ein Formular mit einigen Optionsfeldern und möchte ihnen Beschriftungen zuordnen. Der label
Formular-Helfer verwendet nur ein Formularfeld als Parameter. In diesem Fall habe ich jedoch mehrere Optionsfelder für ein einzelnes Formularfeld. Die einzige Möglichkeit, die ich sehe, besteht darin, manuell ein Etikett zu erstellen und die ID, die automatisch für das Optionsfeld generiert wird, fest zu codieren. Kennt jemand einen besseren Weg, dies zu tun?
Beispielsweise:
<% form_for(@message) do |f| %>
<%= label :contactmethod %>
<%= f.radio_button :contactmethod, 'email', :checked => true %> Email
<%= f.radio_button :contactmethod, 'sms' %> SMS
<% end %>
Dies erzeugt so etwas wie:
<label for="message_contactmethod">Contactmethod</label>
<input checked="checked" id="message_contactmethod_email" name="message[contactmethod]" value="email" type="radio"> Email
<input id="message_contactmethod_sms" name="message[contactmethod]" value="sms" type="radio"> SMS
Was ich möchte:
<input checked="checked" id="message_contactmethod_email" name="message[contactmethod]" value="email" type="radio"><label for="message_contactmethod_email">Email</label>
<input id="message_contactmethod_sms" name="message[contactmethod]" value="sms" type="radio"> <label for="message_contactmethod_sms">SMS</label>
ruby-on-rails
forms
Bryan
quelle
quelle
:value
Option an übergebenf.label
, tun Sie dasselbe. zB<%= f.label :contactmethod, 'SMS', :value => 'sms' %>
. Dadurch wird das Attribut "für" des Etiketten-Tags korrekt festgelegt. Durch Klicken auf das Etikett wird das entsprechende Optionsfeld ausgewählt. In der obigen Antwort führt die einfache Verwendung deslabel
Hilfsprogramms dazu, dass das Attribut "für" falsch ist, wenn das Optionsfeld mit FormBuilderchecked
Wert bedingt setzen möchten stackoverflow.com/a/4708921/429521Wenn Sie die
:value
Option an übergeben,f.label
wird sichergestellt, dass dasfor
Attribut des Label-Tags mit der ID des entsprechenden Tags übereinstimmtradio_button
Siehe ActionView :: Helpers :: FormHelper # -Label
quelle
field_with_errors
bei Bedarf auch das div (das bei Verwendung der:contactmethod_email
Methode nicht angezeigt wird). Das ist die richtige Antwort!Wenn Sie möchten, dass dem Objektnamen eine ID vorangestellt wird, sollten Sie Formularhelfer für das Formularobjekt aufrufen:
Dies stellt auch sicher, dass alle übermittelten Daten im Speicher gespeichert werden, falls Validierungsfehler usw. auftreten.
Wenn Sie die Formularhilfemethode für das Formularobjekt nicht aufrufen können, z. B. wenn Sie einen Tag-Helfer (radio_button_tag usw.) verwenden, können Sie den Namen interpolieren, indem Sie:
In diesem Fall müssen Sie den Wert manuell angeben, um alle Übermittlungen beizubehalten.
quelle
Wenn Sie
true
/false
als Wert verwenden, wird das Feld vorab ausgefüllt, wenn das an das Formular übergebene Modell dieses Attribut bereits ausgefüllt hat:quelle
Dies ist ein Beispiel aus meinem Projekt für die Bewertung mithilfe von
radio
Schaltflächen und derenlabel
squelle