2010-07-30 9 views
1

Je rencontre un problème lors de l'affichage d'une liste de cases à cocher 'catégorie' lorsque j'essaie de les imbriquer dans un formulaire fields_for.Comment afficher une liste de cases à cocher HABTM dans un modèle imbriqué

J'ai un modèle 'produit' qui a 'has_many' 'photos' qui 'has_and_belongs_to_many' 'catégories'. Je suis à peu près sûr que toutes mes associations dans mes modèles sont correctes, tout comme ma table de jointures pour la relation 'photos' et 'catégories'.

Nesting juste la « photo » intérieur du « produit » fonctionne pour moi: modèle

<%= form_for(@product) do |f| %> 

    <div class="field"> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </div> 

    <div class="field"> 
    <% f.fields_for :photos do |builder| %> 
      <%= builder.label :name, "Photo name" %> 
      <%= builder.text_field :name %> 
     <% end %> 
    </div> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

Mais je ne peux pas ajouter la « catégorie » avec les cases à cocher. Voici ce qui ne fonctionne pas:

<%= form_for(@product) do |f| %> 

     <div class="field"> 
     <%= f.label :name %><br /> 
     <%= f.text_field :name %> 
     </div> 

     <div class="field"> 
     <% f.fields_for :photos do |builder| %> 
       <%= builder.label :name, "Photo name" %> 
       <%= builder.text_field :name %> 

       <div class="field"> 
        Categories: 
        <% for category in Category.find(:all)%> 
         <%= check_box_tag "photo[category_ids][]", category.id, @photo.categories.include?(category) %> 
         <%= category.name %> 
        <% end %> 
       </div> 

      <% end %> 
     </div> 

     <div class="actions"> 
     <%= f.submit %> 
     </div> 
    <% end %> 

Le check_box_tag et l'absence d'un assistant formulaire pour faire du vélo dans la liste des catégories qui me vissage. quelqu'un peut-il aider s'il vous plait? Merci.

MISE À JOUR: Je peux l'obtenir pour travailler avec cette boîte de sélection, mais je suis en train de le faire travailler avec les cases à cocher:

<%= f.collection_select :category_ids, Category.find(:all, :order => 'name'), :id, :name, {}, :multiple => true %> 
+0

infos connexes, peut-être que cela vous inspire se: http: // Railscasts. com/episodes/17-habtm-checkboxes – giraff

+0

Donc un produit peut avoir beaucoup de photos, qui à leur tour peuvent avoir plusieurs catégories. Je cours dans quelque chose de similaire moi-même. Je suis capable d'afficher les cases à cocher mais les données ne sont pas conservées lors de la création ou de la modification. Afin de les faire montrer, je crois que vous devriez changer '@ photo.categories.include?' En '@ product.photos.first.include?' De là, je ne sais pas où aller. Ce qui est exactement pourquoi j'ai "commenté" et n'a pas "répondu". – Tass

Répondre

0

Avez-vous vérifié dans accepts_nested_attributes_for

Voici un exemple de la façon d'obtenir HABTM de travailler avec accepts_nested_attributes_for

http://patshaughnessy.net/2010/4/4/creating-associations-to-existing-data-part-3-has_many-through-scaffolding

+0

J'utilise 'accept_nested_attributes_for' dans mon modèle de produit (qui a beaucoup de photos) mais je ne l'utilise pas dans mon modèle de photo (qui a_et_joint_à_de nombreuses catégories). – jrs