Forum: Rails France Has_many :through sur plusieurs tables

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
740cd8c5438370ea1be7c66bb3d20582?d=identicon&s=25 Florent (Guest)
on 2009-03-17 11:22
(Received via mailing list)
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
This topic is locked and can not be replied to.