2012-03-02 16 views
6

Nel modello a oggetti, homultipla has_many: attraverso

has_many :likes 
has_many :hates 
has_many :users, :through => :likes 
has_many :users, :through => :hates 

Come faccio ad avere l'elenco degli utenti per hobbistica? Per esempio. object.users < --- ma come faccio a specificare tramite Mi piace o Hates?

risposta

6

È necessario assegnare a queste due diverse associazioni nomi diversi. Che dire

has_many :likes 
has_many :hates 
has_many :likers, :through => :likes, :source => :user 
has_many :haters, :through => :hates, :source => :user 
+0

Questo è quello che ho pensato, anche, ma la documentazione di 'has_many' (in ActiveRecord :: :: Associazioni ClassMethods) dice: "':. Through' specifica associazione attraverso cui eseguire la query [.. .] Le opzioni per ': class_name',': primary_key' e ': foreign_key' ** sono ignorate **, in quanto l'associazione utilizza il reflection di origine." - Quindi, ': class_name' non farà nulla, vero? – fanaugen

+0

Hai ragione, ho aggiornato l'esempio per essere conforme alla documentazione, dove fa riferimento all'associazione sorgente, da cui si può dedurre che si tratta di un oggetto Utente. –

+0

Penso che ': source =>: user' dovrebbe essere': source =>: users'. –

0

Si può fare come:

has_many :user_likes, :through => :likes, :class_name => 'User' 
1

Sembra che ho bisogno di aggiungere fonte troppo. Se non Rails cercherà i likers/liker in Mi piace.

has_many :likes 
has_many :hates 
has_many :likers, :through => :likes, :class_name => 'User', :source => 'user' 
has_many :haters, :through => :hates, :class_name => 'User', :source => 'user' 
Problemi correlati