2010-02-21 13 views
6

Immagina di avere articoli wiki, con molte revisioni. Mi piacerebbe fare una query con ActiveRecord attraverso il database, che restituisce solo quegli articoli che hanno revisioni che vengono aggiornati nelle ultime 24 ore. E 'possibile una cosa del genere?Rails ActiveRecord: è una combinazione: include e: query condizioni possibili?

mi immagino che sarebbe qualcosa di simile:

Articles.find_all(:include => :revisions, 
        :conditions => {:revision[updated_at] => 1.week.ago..Time.now.utc}) 

Se questo non è possibile, c'è qualche tipo di SQL prime potevo passare a find_by_sql che avrebbe fatto il trucco?

risposta

4

Se avete solo bisogno l'articolo e non hanno bisogno eager loading di tutte le revisioni, è possibile utilizzare: si unisce invece. Usa meno memoria perché non precarica tutte le revisioni per ogni articolo. Usa: includi anche se farai qualcosa come article.revisions.

Article.find(:all, 
    :joins => :revisions, 
    :conditions => ["revisions.updated_at > ?", 24.hours.ago] 
) 
+0

E il caso in cui si desidera trovare TUTTI gli articoli e SOLO quelle revisioni che sono state aggiornate 24 ore fa? (invece di ridurre il numero di articoli). – sscirrus

+0

Se vuoi gli articoli e le revisioni, vorrei usare: include invece di: join –

3

A seconda di come esattamente i tuoi modelli hanno chiamato, sarà qualcosa di simile.

Article.find(:all, :include => :revisions, :conditions => ["revisions.updated_at > ?", 1.week.ago]) 
Problemi correlati