2010-01-25 12 views
6

En mi aplicación Rails tengo una jerarquía de niveles múltiples del tipo siguiente:has_many con la jerarquía de niveles múltiples y la única herencia de tablas

class Vehicle < ActiveRecord::Base end 
class RoadVehicle < Vehicle end 
class Car < RoadVehicle end 
class Buss < RoadVehicle end 

Entonces tengo una clase de referencia al nivel medio, así:

class Garage < ActiveRecord::Base 
    has_many :road_vehicles 
end 

En este ejemplo simplificado, le he dado a la tabla de vehículos una columna de tipo para habilitar la herencia de tabla única. Además, contiene una columna garage_id, para habilitar la relación has_many. Cuando creo un nuevo garaje y agrego autos y autobuses, todos se agregan a la base de datos como se esperaba. Sin embargo, cuando más tarde recupero el objeto del garaje e inspecciono la colección road_vehicles, está vacío. ¿Alguien puede decirme lo que estoy haciendo mal?

Respuesta

6

Al configurar asociaciones con modelos de herencia de tabla única, debe consultar el modelo principal para que las asociaciones puedan inferir un nombre de tabla. Así, en su clase Garage que necesita:

has_many :vehicles 

Si desea restringir la asociación a RoadVehicles, puede agregar condiciones:

has_many :vehicles, :conditions => {:type => ['Car', 'Bus']} 
Cuestiones relacionadas