2011-09-07 2 views
0

J'essaie de comprendre le comportement des associations, mais je fais quelque chose de mal.Rails 3 - associations - comment ça marche?

J'ai ces deux modèles:

class Album < ActiveRecord::Base 
    has_many :photos 
end 

class Photo < ActiveRecord::Base 
    belongs_to :album 
end 

Cela signifie qu'un album pourrait avoir de nombreuses photos et chaque photo appartient à un album.

Maintenant, si j'ai ce code dans la vue (en supposant que j'ai mis @album = 106 dans le contrôleur, qui est le numéro d'identification de l'album):

@album.photos.each_with_index do |pic, index| 
    ... 
end 

Et je suis arrivé l'erreur: ActionView::Template::Error (undefined method 'photos' for 106:Fixnum):

Pourquoi j'obtiens ce message d'erreur? Je pensais que je dois définir l'ID variable @album de l'album, puis la boucle va chercher les photos dans le tableau Photos par album_id (album_id = 106).

Ce que je fais encore mal?

+0

En utilisant une partie pour rendre chaque photo est préférée, car cela sépare les «blocs de construction» de vos vues. render @ album.photos rendra la vue 'photos/_photo.html.erb' une fois pour chaque photo de l'album. –

Répondre

4

Vous devez obtenir l'instance de modèle pour aller chercher les associations, comme ceci:

@album = Album.find(106) 

Pour trier les photos par date de création, faites comme ceci:

@album.photos.order('created_at DESC').each_with_index do |pic, index| 
    ... 
end 
+0

ouais, c'est vrai, merci. Je voudrais vous demander encore une question - maintenant cela fonctionne et je reçois enfin les données de la table 'Photos' - est-il possible de définir' each' boucle, comment choisir les données de la table? Par exemple, la manière implicite par ID le plus bas, mais je voudrais le temps le plus récent ... est-ce possible cette déclaration? – user1946705

+0

@ user705586 terminé, voir la réponse mise à jour. –

+0

J'aime RoR chaque jour de plus en plus! Merci Benoit. – user1946705