Mi pregunta es similar a esta, pero para una aplicación Rails.
Tengo un formulario con algunos botones de opción y me gustaría asociar etiquetas con ellos. El labelasistente de formulario solo toma un campo de formulario como parámetro, pero en este caso tengo varios botones de opción para un solo campo de formulario. La única forma en que veo hacerlo es crear manualmente una etiqueta, codificando la identificación que se genera automáticamente para el botón de opción. ¿Alguien sabe de una mejor manera de hacerlo?
Por ejemplo:
<% form_for(@message) do |f| %>
<%= label :contactmethod %>
<%= f.radio_button :contactmethod, 'email', :checked => true %> Email
<%= f.radio_button :contactmethod, 'sms' %> SMS
<% end %>
Esto genera algo como:
<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
Lo que quiero:
<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
fuente
fuente

:valueopción af.labelhará lo mismo. por ej<%= f.label :contactmethod, 'SMS', :value => 'sms' %>. Esto establece el atributo "for" de la etiqueta de etiqueta correctamente, lo que hace que al hacer clic en la etiqueta se seleccione el botón de opción apropiado. En la respuesta anterior, simplemente usar ellabelayudante hará que el atributo "for" sea incorrecto cuando se cree el botón de opción con FormBuildercheckedvalor condicional stackoverflow.com/a/4708921/429521Al pasar la
:valueopción a,f.labelse asegurará de que elforatributo de la etiqueta de etiqueta sea el mismo que el ID del correspondienteradio_buttonVer ActionView :: Helpers :: FormHelper # label
fuente
field_with_errorsdiv cuando es necesario (que no aparece cuando se usa el:contactmethod_emailmétodo). ¡Esta es la respuesta correcta!Si desea que el object_name tenga el prefijo de cualquier ID, debe llamar a los ayudantes de formulario en el objeto de formulario:
Esto también asegura que los datos enviados se almacenen en la memoria en caso de que haya errores de validación, etc.
Si no puede llamar al método de ayuda de formulario en el objeto de formulario, por ejemplo, si está usando una etiqueta de ayuda (radio_button_tag, etc.) puede interpolar el nombre usando:
En este caso, deberá especificar el valor manualmente para preservar cualquier envío.
fuente
Al usar
true/falsecomo valor, el campo se completará previamente si el modelo pasado al formulario ya tiene este atributo completado:fuente
Este es un ejemplo de mi proyecto para calificar usando
radiobotones y sulabelsfuente