2012-07-24 16 views
5

He intentado todo lo que pensé que funcionaría para esto y no estoy obteniendo nada.rails scope y se une a

en rieles 3, necesito encontrar a todos los usuarios con un reproductor de cd en su automóvil. Un automóvil tiene un usuario y una radio, y un usuario pertenece a un automóvil, y una radio tiene muchos automóviles.

Estoy tropezando sobre cómo realizaría esta búsqueda a través de un alcance en el modelo de usuario.

class User 
    belongs_to :car 

class Car 
    belongs_to radio 
    has_one :user, :dependent => destroy 

class Radio 
    has_many :cars 
+0

Debería decir cuál es el esquema de su base de datos si desea obtener ayuda. –

+0

_ "un usuario pertenece a un automóvil y una radio tiene muchos automóviles" _ este es un modelo extraño. ¿Puedes mostrar un código? – alf

Respuesta

11

Estoy asumiendo que quiere decir esto: coche tiene radio_id, el usuario tiene car_id, desde una radio tiene muchos coches y el coche tiene un usuario. La tabla con la clave externa siempre está en el belongs_to final de la relación.

Sin saber muy bien la estructura que está buscando, algo así como lo siguiente debería funcionar:

scope :with_cd_player, joins(:cars).where('cars.radio_id is not null') 

si hay una columna de categoría en la radio, la siguiente funcionaría.

scope :with_cd_player, joins(:car => :radio).where('cars.radio_id is not null').where("radios.category = 'cd_player'") 
+0

¡gracias! eso es exactamente lo que estaba buscando. –