Moje pytanie jest podobne do tego, ale dotyczy aplikacji Rails.
Mam formularz z kilkoma przyciskami opcji i chciałbym skojarzyć z nimi etykiety. label
Postać pomocnika zajmuje tylko pole formularza jako parametr, ale w tym przypadku mam kilka przycisków opcji dla pojedynczego pola formularza. Jedynym sposobem, w jaki mogę to zrobić, jest ręczne utworzenie etykiety i zakodowanie identyfikatora, który jest generowany automatycznie dla przycisku opcji. Czy ktoś zna lepszy sposób na zrobienie tego?
Na przykład:
<% form_for(@message) do |f| %>
<%= label :contactmethod %>
<%= f.radio_button :contactmethod, 'email', :checked => true %> Email
<%= f.radio_button :contactmethod, 'sms' %> SMS
<% end %>
To generuje coś takiego:
<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
Czego chcę:
<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
źródło
źródło
:value
opcjif.label
spowoduje to samo. np<%= f.label :contactmethod, 'SMS', :value => 'sms' %>
. Spowoduje to prawidłowe ustawienie atrybutu „for” znacznika etykiety, co powoduje, że kliknięcie etykiety powoduje wybranie odpowiedniego przycisku opcji. W powyższej odpowiedzi użycielabel
pomocnika spowoduje, że atrybut „for” będzie niepoprawny, gdy przycisk opcji zostanie utworzony za pomocą programu FormBuilderchecked
warunkowego ustawienia wartości stackoverflow.com/a/4708921/429521Przekazanie
:value
opcjif.label
zapewni, żefor
atrybut tagu etykiety będzie taki sam, jak identyfikator odpowiedniegoradio_button
Zobacz etykietę ActionView :: Helpers :: FormHelper #
źródło
field_with_errors
div, gdy jest to konieczne (które nie są wyświetlane podczas korzystania z:contactmethod_email
metody). to jest poprawna odpowiedź!Jeśli chcesz, aby nazwa_obiektu poprzedzona była dowolnym identyfikatorem, powinieneś wywołać pomocników formularzy na obiekcie formularza:
Daje to również pewność, że wszelkie przesłane dane są przechowywane w pamięci na wypadek błędów walidacji itp.
Jeśli nie możesz wywołać metody pomocnika formularza na obiekcie formularza, na przykład jeśli używasz pomocnika tagów (radio_button_tag itp.), Możesz interpolować nazwę za pomocą:
W takim przypadku musisz ręcznie określić wartość, aby zachować wszelkie przesłane materiały.
źródło
Użycie
true
/false
jako wartości spowoduje, że pole będzie wstępnie wypełnione, jeśli model przekazany do formularza ma już wypełniony ten atrybut:źródło
To przykład z mojego projektu do oceniania za pomocą
radio
przycisków i jegolabel
sźródło