Has_many :through sur plusieurs tables

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 :slight_smile: 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 :slight_smile: 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