Usar una cláusula .where IN con .includes hacia arriba y hacia abajo en muchos niveles anidados para buscar un grupo de ID en Rails 3.1

Me gustaría filtrar una lista de direcciones de correo electrónico de padres por clase de estudiantes.

Aquí hay una simplificación de mis modelos:

Class District
 has_many :schools
 has_many :families
 has_many :children, :through => :families
 has_many :parents, :through => :families
 has_many :enrollments, :through => :children
end


Class Enrollments
 belongs_to :child
 belongs_to :classroom
end

La dirección de correo electrónico está asociada con el registro de los padres y me gustaría filtrar los correos electrónicos por una serie de ID de aula.

Puedo hacer que esto funcione:

idees = [49, 50]
current_district = District.first
@emails = current_district.parents.includes(:family => { :children => { :enrollments => {:classroom => { :program => :location }}}}).where("family_id IN (?)", idees)
# Returns families with ID 49 and 50

Pero no puedo hacer que nada como esto funcione

idees = [49, 50]
current_district = District.first
@emails = current_district.parents.includes(:family => { :children => { :enrollments => {:classroom => { :program => :location }}}}).where("family.children.enrollments.classroom_id IN (?)", idees)
# Returns: PGError: ERROR:  cross-database references are not implemented: family.children.enrollment.classroom_id

¿Qué estoy haciendo mal o hay otra mejor manera de escribir esta consulta?

preguntado el 27 de julio de 12 a las 18:07

1 Respuestas

La línea de abajo es el problema.

where("family.children.enrollments.classroom_id IN (?)", idees)

Cámbielo a:

where("enrollments.classroom_id IN (?)", idees)

Respondido 27 Jul 12, 20:07

Gracias. Siempre encuentro problemáticas las consultas anidadas. - JHo

Bienvenido. No piense en consultas anidadas, es solo . :) - basgys

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.