2009-09-02 7 views
0

J'ai le formulaire suivant pour photo_album qui utilise la fonction de formes imbriquées des Rails pour enregistrer les photos lors de la mise à jour de photo_album. Et avoir des problèmes avec la sélection de la valeur du bouton radio. Je veux qu'une seule des photos soit capable de sélectionner la couverture de l'album, mais en raison de la façon dont les rails produisent des identifiants et des noms d'éléments de formulaire, je suis capable de sélectionner toutes les photos comme couvertures d'album. Y a-t-il une solution de contournement?Rails: sélection de bouton radio pour les objets de formes imbriquées

<% form_for @photo_album do |f| %> 
    <%= f.error_messages %> 

    <% @photo_album.photos.each do |photo| %> 
    <% f.fields_for :photos, photo do |photo_fields| %> 
     <p> 
     <%= image_tag url_for_image_column(photo, "data", :thumb) %> 
     </p> 
     <p> 
     <%= photo_fields.label :title %> 
     <%= photo_fields.text_field :title %> 
     </p> 
     <p> 
     <%= photo_fields.label :body %> 
     <%= photo_fields.text_area :body %> 
     </p> 
     <p> 
     <%= photo_fields.radio_button :cover, "1" %> 
     <%= photo_fields.label :cover, 'Album Cover', :class => 'option' %> 
     <%= photo_fields.check_box :_delete %> 
     <%= photo_fields.label :_delete, 'Delete', :class => 'option' %> 
     </p> 
    <% end %> 
    <% end %> 

    <p> 
    <%= f.submit @photo_album.new_record? ? 'Create' : 'Update' %> 
    </p> 
<% end %> 

Et voici le code HTML produit par des rails (qui fait partie du problème) pour les boutons radio:

<p> 
<input type="radio" value="1" name="photo_album[photos_attributes][0][cover]" id="photo_album_photos_attributes_0_cover_1"/> 
<label for="photo_album_photos_attributes_0_cover" class="option">Album Cover</label> 
<input type="hidden" value="0" name="photo_album[photos_attributes][0][_delete]"/><input type="checkbox" value="1" name="photo_album[photos_attributes][0][_delete]" id="photo_album_photos_attributes_0__delete"/> 
<label for="photo_album_photos_attributes_0__delete" class="option">Delete</label> 
</p> 

Répondre

1

Je suppose que dans ce cas, vous voudriez utiliser radio_button_tag à la place et utilise le même nom.

Cela devrait être proche - vous aurez toujours besoin de savoir quand vous voulez passer dans le vrai:

<%= radio_button_tag "cover", photo.id, todo %> 

Vous pourriez également être en mesure de préciser le nom avec l'aide de radio_button, mais il n'a pas tout à fait en forme le modèle donc radio_button_tag a plus de sens pour moi - je pourrais me tromper.