2010-02-21 7 views
6

Представьте, что у меня есть статьи в вики, со многими версиями. Я хотел бы сделать запрос с ActiveRecord через базу данных, которая возвращает только те статьи, у которых есть ревизии, которые обновляются за последние 24 часа. Возможно ли это?Rails ActiveRecord: возможен ли комбинированный: include и: условия?

Я бы себе представить, что было бы что-то вроде:

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

Если это не возможно, есть некоторый тип сырья SQL я мог бы перейти к find_by_sql, что бы сделать трюк?

ответ

4

Если вам нужна только статья и не нужен жадная загрузка всех изменений, вы можете использовать: присоединяется вместо. Он использует меньше памяти, потому что он не предварительно загружает все версии для каждой статьи. Используйте: include, хотя если вы будете делать что-то вроде article.revisions.

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

Как насчет случая, когда вы хотите найти ВСЕ статьи, а также ТОЛЬКО те изменения, которые были обновлены 24 часа назад? (вместо сокращения количества статей). – sscirrus

+0

Если вы хотите статей и исправлений, я бы использовал: include вместо: join –

3

В зависимости от того, как именно вы назвали свои модели, это будет что-то вроде этого.

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