2010-02-21 9 views
6

Stellen Sie sich vor, ich habe Wiki-Artikel, mit vielen Revisionen. Ich möchte eine Abfrage mit ActiveRecord über die Datenbank durchführen, die nur die Artikel zurückgibt, die Revisionen haben, die in den letzten 24 Stunden aktualisiert wurden. Ist so etwas möglich?Rails ActiveRecord: Ist eine Kombination aus: include und: conditions möglich?

Ich stelle mir würde es so etwas wie sein würde:

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

Wenn dies nicht möglich ist, ist eine Art von Roh-SQL dort könnte ich das tun würde, den Trick find_by_SQL passieren zu?

Antwort

4

Wenn Sie nur den Artikel benötigen und brauchen nicht eifrig Laden aller Revisionen, könnten Sie verwenden: schließt sich stattdessen. Es benötigt weniger Speicher, da nicht alle Revisionen für jeden Artikel vorab geladen werden. Benutzen Sie: wenn Sie etwas wie article.revisions tun werden.

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

Wie wäre es mit dem Fall, wo Sie ALLE Artikel sowie JUST diejenigen Revisionen, die vor 24 Stunden aktualisiert wurden? (anstatt die Anzahl der Artikel zu reduzieren). – sscirrus

+0

Wenn Sie die Artikel und die Revisionen wollen, würde ich verwenden: include statt: Joins –

3

Je nachdem, wie genau Sie Ihre Modelle benannt haben, wird es in etwa so aussehen.

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