rails query left joins includes active ruby-on-rails ruby activerecord named-scope

ruby on rails - query - Rails named_scopes con combinaciones



rails sql query (2)

El problema es que "SELECCIONAR *": la consulta recoge todas las columnas de clips, series y espectáculos, en ese orden. Cada tabla tiene una columna de id. Y genera conflictos entre las columnas nombradas en los resultados. La última columna de identificación retirada (de las presentaciones) reemplaza a la que desea. Debería utilizar una: opción de selección con los enlaces: como:

named_scope :visible, { :select => "episodes.*", :joins => "INNER JOIN series ON series.id = clips.owner_id INNER JOIN shows on shows.id = series.show_id", :conditions=>"shows.visible = 1 AND clips.owner_type = ''Series'' " }

Estoy tratando de crear un named_scope que use un join, pero aunque el SQL generado se ve bien, el resultado es basura. Por ejemplo:

class Clip < ActiveRecord::Base named_scope :visible, { :joins => "INNER JOIN series ON series.id = clips.owner_id INNER JOIN shows on shows.id = series.show_id", :conditions=>"shows.visible = 1 AND clips.owner_type = ''Series'' " }

(Un Clip es propiedad de una Serie, una Serie pertenece a un Show, un Show puede ser visible o invisible).

Clip.all hace:

SELECT * FROM `clips`

Clip.visible.all hace:

SELECT * FROM `clips` INNER JOIN series ON series.id = clips.owner_id INNER JOIN shows on shows.id = series.show_id WHERE (shows.visible = 1 AND clips.owner_type = ''Series'' )

Esto se ve bien. Pero la matriz resultante de modelos de Clip incluye un Clip con una ID que no está en la base de datos; en su lugar, recogió una identificación de show. ¿Dónde estoy equivocado?