Rails ActiveRecord: возможен ли комбинированный запрос: include и: condition? - PullRequest
6 голосов
/ 21 февраля 2010

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

Я бы предположил, что это будет что-то вроде:

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

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

Ответы [ 2 ]

4 голосов
/ 21 февраля 2010

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

Article.find(:all, 
  :joins => :revisions, 
  :conditions => ["revisions.updated_at > ?", 24.hours.ago]
)
3 голосов
/ 21 февраля 2010

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

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