2010-02-21 19 views
6

Imagine que tengo artículos wiki, con muchas revisiones. Me gustaría hacer una consulta con ActiveRecord a través de la base de datos, que solo devuelve los artículos que tienen revisiones que se actualizan en las últimas 24 horas. ¿Es posible tal cosa?Rails ActiveRecord: ¿Es posible una consulta combinada: incluir y: condiciones?

me imagino que sería algo así como:

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

Si esto no es posible, ¿hay algún tipo de SQL prima que podía pasar a find_by_SQL que haríamos el truco?

Respuesta

4

Si sólo necesita el artículo y no necesita carga ansiosa de todas las revisiones, se puede utilizar: se une en su lugar. Utiliza menos memoria porque no está precargando todas las revisiones para cada artículo. Uso: incluya aunque si va a hacer algo como article.revisions.

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

¿Qué tal el caso en el que desea encontrar TODOS los artículos, así como SÓLO las revisiones que se actualizaron hace 24 horas? (en lugar de reducir el número de artículos también). – sscirrus

+0

Si quiere los artículos y las revisiones, usaría: incluir en lugar de: une –

3

Dependiendo de cómo exactamente tenga sus modelos nombrados, va a ser algo como esto.

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