Bonjour,
Comme explicité dans le titre (ou presque), je cherche à utiliser au
mieux :through avec has_many. Puisqu’un exemple concret vaut tous les
grand discours, voici 4 tables d’un forum que j’aimerai joindre :
class Forum < AR::B
has_many :categories
end
class Category < AR::B
has_many :subjects
belongs_to :forum
end
class Subject < AR::B
has_many :message
belongs_to :category
end
class Message < AR::B
belongs_to :subject
end
Jusque là, tout fonctionne Je souhaiterai désormais m’attarder sur
ma classe Forum. Une relation simple à ajouter est
“has_many :subjects, :through => :categories”. J’aurai également aimé
ajouter “has_many :messages, :through => :subjects” mais ça ne semble
pas fonctionner… (Mysql::Error : Unknown column ‘subjects.forum_id’
in ‘where clause’ en faisant un simple “forum.messages” dans ma vue).
Du coup, et après de longues recherches [1], je me suis tourné vers
une méthode :
def messages
msg = []
subjects.each {|s| msg << s.messages}
msg.flatten
end
Si mon “forum.messages” fonctionne désormais, ça se corse dès que je
souhaite faire un “forum.messages.find(:all, :conditions => [‘view =
0’])”, par exemple, pour voir tous les message qui n’ont jamais été
lus.
Je suis donc à la recherche de conseils, espérant ne pas être le seul
à implémenter une hierarchie de quatres tables Quel est le moyen le
plus simple et surtout le plus propre de créer ses relations dans mes
modèles? Comment faire en sorte que mon forum.messages.find(:all)
fonctionne?
Un grand merci pour votre aide.
Florent
[1] Je n’ai trouvé qu’un seul sujet intéressant sur la question :
http://www.ruby-forum.com/topic/115029