2010-01-25 9 views
6

w mojej aplikacji Rails mam hierarchii wielopoziomowego z następujących rodzaju:has_many z hierarchii wielopoziomowego i pojedynczej tabeli dziedziczenia

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

Następnie mam klasy odwołuje się do poziomu środkowego tak:

class Garage < ActiveRecord::Base 
    has_many :road_vehicles 
end 

W tym uproszczonym przykładzie dałem tabeli pojazdów kolumnę typu umożliwiającą dziedziczenie pojedynczego stołu. Dodatkowo zawiera kolumnę garage_id, aby włączyć relację has_many. Kiedy tworzę nowy garaż i dodam samochody i autobusy, wszystkie zostaną dodane do bazy danych zgodnie z oczekiwaniami. Jednak, gdy później odzyskam obiekt garażowy i sprawdzę kolekcję road_vehicles, jest on pusty. Czy ktoś może mi powiedzieć, co robię źle?

Odpowiedz

6

Podczas ustawiania asocjacji z modelami dziedziczenia z jedną tabelą, należy odwoływać się do modelu nadrzędnego, aby powiązania mogły wywnioskować nazwę tabeli. Tak więc, w klasie Garage trzeba:

has_many :vehicles 

Jeśli chcesz ograniczyć stowarzyszenie RoadVehicles można dodać warunki:

has_many :vehicles, :conditions => {:type => ['Car', 'Bus']} 
Powiązane problemy