2010-01-25 11 views
6

Nel mio Rails app ho una gerarchia multi-livello delle seguenti specie:has_many con la gerarchia multi-livello e la tabella ereditarietà singola

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

Poi ho una classe che fa riferimento al livello medio in questo modo:

In questo esempio semplificato, ho dato alla tabella veicoli una colonna di tipo per abilitare l'ereditarietà di una tabella singola. Inoltre, contiene una colonna garage_id, per abilitare la relazione has_many. Quando creo un nuovo garage e aggiungo auto e bus, tutti vengono aggiunti al database come previsto. Tuttavia, quando in seguito recupero l'oggetto garage e ispeziono la raccolta road_vehicles, è vuoto. Qualcuno può dirmi cosa sto facendo di sbagliato?

risposta

6

Quando si impostano associazioni con modelli di ereditarietà di tabelle singole, è necessario fare riferimento al modello principale in modo che le associazioni possano dedurre un nome di tabella. Quindi, nella tua classe Garage è necessario:

has_many :vehicles 

Se si desidera limitare l'associazione a RoadVehicles, è possibile aggiungere le condizioni:

has_many :vehicles, :conditions => {:type => ['Car', 'Bus']} 
Problemi correlati