2010-07-08 4 views
0

J'ai un modèle de photos et un modèle de galerie. Le modèle de galerie (j'ai utilisé l'échafaudage astucieux) a juste un champ, un nom de galerie. Dans mon formulaire d'édition de photo, je veux lier chaque photo à une galerie, par exemple. Je crée 2 galeries séparées en 2009 et 2010, je veux avoir une liste déroulante sur chaque page d'édition de photos avec la liste des galeries, donc chaque photo peut être placée dans une galerie. J'ai utilisé this et this comme points de départ, mais je suis bloqué et je n'arrive pas à faire apparaître les galeries dans mon formulaire photo.fields_for imbriqué

class Gallery < ActiveRecord::Base 
    has_many :photos 
    attr_accessible :name 
end 

class Photo < ActiveRecord::Base 
    belongs_to :gallery 
    accepts_nested_attributes_for :gallery, :allow_destroy => true 

vues/photos/_form.html.erb

<% form_for @photo, :html => { :multipart => true } do |photo_form| %> 

    <p> 
    <%= photo_form.label :title %><br /> 
    <%= photo_form.text_field :title %> 
    </p> 

<p> 
    <% photo_form.fields_for :gallery do |gal_form| %> 

     <%= gal_form.label :name %> 
     <%= gal_form.collection_select :gallery_id, Gallery.all, :id, :name %> 
    </p> 

     <% end %> 

    <p> 
    <%= submit_tag %> 
    </p> 

<% end %> 

Actuellement il n'y a pas de liste déroulante sur le formulaire de photo la page, bien que je ne reçois pas d'erreurs et il n'y a aucune mention soit dans la source de la page. J'apprécierais toute aide ou pour être pointé dans la bonne direction ...

Répondre

2

Si votre photo appartient à la galerie alors n'est pas le gallery_id sur la photo? Donc le gallery_id serait un membre du photo_form pas le gal_form.

<%= photo_form.collection_select :gallery_id, Gallery.all, :id, :name %> 

MISE À JOUR:

Voici comment je voir votre vue:

<% form_for @photo, :html => { :multipart => true } do |photo_form| %> 

    <p> 
    <%= photo_form.label :title %><br /> 
    <%= photo_form.text_field :title %><br /> 
    <%= photo_form.collection_select :gallery_id, Gallery.all, :id, :name %> 
    </p> 
    <p> 
    <%= submit_tag %> 
    </p> 

<% end %> 

Votre modèle:

class Gallery < ActiveRecord::Base 
    has_many :photos 
end 

class Photo < ActiveRecord::Base 
    belongs_to :gallery 
end 
+0

avec que j'obtiens une erreur .. méthode non définie 'gallery_id ' –

+0

pouvez-vous montrer ajouter votre schéma de base de données? Parce que si la photo doit être dans une galerie, alors vos modèles semblent corrects. Mais vous devriez avoir une colonne gallery_id dans votre tableau de photos. Aussi, juste pour confirmer, vous avez le '@photo = Photo.find (id de la photo)'? –

+0

Je n'avais pas de colonne galleries_id mais j'en ai ajouté une bien que cela ne fasse aucune différence, et la méthode show pour les photos est correcte, @photo = Photo.find (params [: id]) –

0

On dirait que vous n'avez pas besoin emboîtées . Je supprimerais accept_nested_attributes_for entièrement.

Le flux de travail doit être: 1) sélectionner une galerie 2) Ajouter et décrire photo

Vous pouvez avoir un contrôleur séparé/vue de la gestion des galeries.

Une fois que vous avez fait cela et vérifié votre schéma, l'exemple ci-dessus devrait fonctionner (collection sélectionner sur des galeries directement liés à la photo)

+0

Je ne comprends pas ce que vous voulez dire, que je ne devrais pas avoir un modèle de galerie? Le flux de travail est correct, les photos sont primaires, les galeries sont secondaires, toutes les photos ne seront pas dans une galerie. –

+0

Une photo mai mai ou ne pas être dans une galerie, et seulement une galerie, non? Il vous suffit donc d'avoir une collection_select sur la photo pour la galerie. Vous pouvez gérer la création/édition de galeries ailleurs. – Winfield

0

@Raphael:

Le nom de colonne doit être gallery_id (nom du modèle + id), après l'avoir ajouté

Essayez cette ligne ci-dessous dans votre console rubis

photos = Photo.find_all_by_gallery_id(Gallery.first) 

Cela devrait vous donner la liste de toutes les photos dans la première galerie.

+0

cela renvoie juste [], et ne devrait rien retourner car je n'ai pas ajouté de photos à une galerie parce que c'est ce que j'essaie de faire fonctionner! –

+0

s'il retourne un tableau vide alors cela devrait fonctionner <% = photo_form.collection_select: gallery_id, Gallery.all,: id,: name%> – Vamsi

+0

Heureux de voir que vous avez réussi. – Vamsi

Questions connexes