Minha pergunta é semelhante a esta, mas para um aplicativo Rails.
Tenho um formulário com alguns botões de opção e gostaria de associar rótulos a eles. O label
auxiliar de formulário usa apenas um campo de formulário como parâmetro, mas nesse caso eu tenho vários botões de opção para um único campo de formulário. A única maneira de fazer isso é criar manualmente um rótulo, codificando permanentemente o ID gerado automaticamente para o botão de opção. Alguém sabe de uma maneira melhor de fazer isso?
Por exemplo:
<% form_for(@message) do |f| %>
<%= label :contactmethod %>
<%= f.radio_button :contactmethod, 'email', :checked => true %> Email
<%= f.radio_button :contactmethod, 'sms' %> SMS
<% end %>
Isso gera 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
O que eu quero:
<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
fonte
fonte
:value
opção paraf.label
fará a mesma coisa. por exemplo<%= f.label :contactmethod, 'SMS', :value => 'sms' %>
. Isso define o atributo "for" da tag label corretamente, o que faz com que clicar no rótulo selecione o botão de opção apropriado. Na resposta acima, simplesmente usando olabel
ajudante fará com que o atributo "for" para ser incorreto quando o botão é criado com FormBuilderchecked
valor condicionalmente stackoverflow.com/a/4708921/429521Passar a
:value
opção paraf.label
garantir que ofor
atributo da tag label seja igual ao ID do correspondenteradio_button
Consulte ActionView :: Helpers :: FormHelper # label
fonte
field_with_errors
div quando necessário (que não aparece ao usar o:contactmethod_email
método). Essa é a resposta correta!Se você deseja que o object_name prefixe qualquer ID, chame os auxiliares de formulário no objeto de formulário:
Isso também garante que todos os dados enviados sejam armazenados na memória, caso haja erros de validação etc.
Se você não pode chamar o método auxiliar de formulário no objeto de formulário, por exemplo, se estiver usando um auxiliar de tag (radio_button_tag etc.), poderá interpolar o nome usando:
Nesse caso, você precisará especificar o valor manualmente para preservar os envios.
fonte
Usar
true
/false
como valor terá o campo preenchido se o modelo passado para o formulário já tiver esse atributo preenchido:fonte
Este é um exemplo do meu projeto para classificação usando
radio
botões e seuslabel
sfonte