2011-12-18 14 views
8

Devo interrogare tutti i post di un utente specifico e includere tutti i commenti e l'utente che appartiene al commento.Rails include relazioni nidificate

class User < ... 
    has_many :posts 
    has_many :comments 
end 

class Post < ... 
    belongs_to :user 
    has_many :comments 
end 

class Comment < ... 
    belongs_to :user 
    belongs_to :post 
end 

@posts = current_user.posts.include(:comments) 

È possibile anche ottenere l'utente del commento? Elenco un sacco di post e commenti Non voglio interrogare ogni utente di commenti.

Thx/Tobias

risposta

26

Prova

@posts = current_user.posts.includes(:comments => :user) 

Per saperne di più su di esso here

+1

E 'possibile limitare il commento a questa richiesta. Voglio solo i 5 ultimi commenti da includere. Se eseguo il loop shout.comments.limit (5) viene eseguita una nuova query – sandelius

+1

Nella mia risposta: 'Posta has_many: comments,: include => [: user],: limit => 5' – clyfe

+0

Sì, ma non volevo recuperare tutti i commenti su una pagina o persino impaginarli? – sandelius

10

ne dite includono alla istruzione di definizione relazione?

: includono
Specificare associazioni di secondo ordine che dovrebbero essere ansiosi caricata quando questo oggetto è caricato.

class Post < 
    belongs_to :user 
    has_many :comments, :include => [:user], :limit => 5 
end 
+1

Sembra: include non è un'opzione valida (almeno non con Rails 4.1), c'è un'alternativa? – FeifanZ

+0

@FeifanZ dovrebbe essere 'includes'. Dovrebbe funzionare bene allora – ahnbizcad

Problemi correlati