Emballage <%= f.check_box %> dans un <label>

J'ai une liste de cases à cocher sur un formulaire. En raison de la façon dont le CSS est structuré, l'étiquette de l'élément est de style directement. Cela implique que je nest la case à cocher à l'intérieur de la balise.

Cela fonctionne en HTML brut, si vous cliquez sur le texte de l'étiquette, l'état de la case à cocher changements. Il ne fonctionne pas avec les rails <%= f.check_box %> helper, cependant, car il génère un caché balise d'entrée en premier.

En résumé,

<label>
   <%= f.check_box :foo %>
   Foo
</label>

c'est la sortie je voulez:

<label>
    <input type="checkbox" ... /> 
    <input type="hidden" ... />
    Foo
</label>

...mais ce est ce que rails est de me donner:

<label>
    <input type="hidden" ... />
    <input type="checkbox" ... />
    Foo
</label>

Donc l'étiquette comportement ne fonctionne pas :(.

Est-il un moyen de contourner ce problème?

Donc, lors de l'imbrication de <input> éléments à l'intérieur d'un <label> tag, si vous ne spécifiez pas un for="id", l'étiquette objectifs de la première entrée de l'enfant? Et parce que les rails rend le caché d'entrée tout d'abord, vous devez remplacer la sortie des entrées? Suis-je comprendre cela correctement?
C'est exact, cependant nfm a noté que l'ordre est sensible et ne sera pas réellement travailler dans l'autre sens.

OriginalL'auteur Ben Scheirman | 2010-05-18