2010-12-04 30 views
0

J'ai 3 classes: Utilisateur, Vélo, Transaction.rails has_many association entre 3 tables

Un utilisateur peut avoir plusieurs bicyclettes et un cycliste n'a qu'un seul utilisateur (propriétaire). L'opération a un vélo, et un utilisateur (l'acheteur) ...

Dans mon modèle utilisateur Je ces associations:

has_many :bicycles_owned, :class_name => "Bicycle", 
     :uniq => true, :foreign_key => "owner_id" 

has_many :trans_bicycles_bought, :class_name => "Transaction", 
     :foreign_key => "buyer_id" 

has_many :bicycles_bought, :class_name=> "Bicycle", 
     :through => :trans_bicycles_bought, :source => :bicycle 

has_many :trans_bicycles_sold, :class_name => "Transaction", 
     :through => :bicycles_owned, :source => :transaction 

Maintenant, je veux l'association bicycles_sold ... Je l'ai déjà essayé beaucoup de choses, mais je ne peux pas obtenir le bon code .. les bons arguments ...

Répondre

0

Que diriez-vous:

has_many :bicycles_sold, :class_name => "Bicycle", 
      :finder_sql => 'SELECT b.* FROM bicycles AS b ' + 
         'JOIN users AS u ON u.id = b.owner_id ' + 
         'JOIN transactions AS t ON t.bicycle_id = b.id ' + 
         'WHERE u.id = #{id}' 
+0

Ei! Merci pour la réponse ... Cette déclaration sql fonctionne bien .. mais elle n'est pas belle et lisible ... Il n'y a pas d'autre option, avec des attributs "through" et "source"? – joao

0

Here i s un article qui pourrait vous intéresser.

Je ne suis pas sûr que Rails 3 supporte has_many imbriqué: through, mais pas 2.3.5. Il y a un (très vieux) billet pour Rails. Il y a aussi un has_many imbriqué: via plugin qui a une branche expérimentale pour 2.3.x. Je n'aime pas utiliser des choses "expérimentales".