2011-02-02 13 views
15

Sé que esto se puede hacer:Rails 3 ActiveRecord conditional includes?

Article.where("published_at <= ?", Time.now).includes(:comments) 

Pero lo que si me gustaría sólo para obtener comentarios enviados en el último mes?

¿El operador .includes permite las condiciones?

Respuesta

13
Article.includes(:comments).where("articles.published_at <= ? and comments.created_at >= ?", Time.now, Time.now - 1.month) 

EDIT:

Article.joins(:comments).where("articles.published_at <= ? and comments.created_at >= ?", Time.now, Time.now - 1.month) 
+0

Vaya, no sabía que podía hacer eso. Muchas gracias. – samvermette

+8

En realidad, esta consulta solo devuelve artículos que * tienen * un comentario publicado el mes pasado. Necesito tener * todos * los artículos devueltos, junto con los comentarios de cada artículo publicados el mes pasado (si hay alguno). – samvermette

+0

¿Qué tal con un join en lugar de un include? (Ver edición) –

4

En Rails4, que debe ser: Article.includes(:comments).where("articles.published_at <= ? and comments.created_at >= ?", Time.now, Time.now - 1.month).references(:comments)

Source

+0

Tenga en cuenta que 'includes' funciona con la asociación nombres mientras 'referencias' necesita el nombre real de la tabla. –

+1

ese '.references()' truco guardado, ty ... – 7urkm3n