has_many mit mehrstufigen Hierarchie und einzelnen Tabellenvererbungs
-
22-09-2019 - |
Frage
In meiner Rails-Anwendung Ich habe eine Multi-Level-Hierarchie der folgenden Art:
class Vehicle < ActiveRecord::Base end
class RoadVehicle < Vehicle end
class Car < RoadVehicle end
class Buss < RoadVehicle end
Dann habe ich eine Klasse Verweis auf die mittlere Ebene in etwa so:
class Garage < ActiveRecord::Base
has_many :road_vehicles
end
In diesem vereinfachten Beispiel habe ich die Fahrzeuge Tabelle, die eine Spalte vom Typ gegeben einzelne Tabelle Vererbung zu ermöglichen. Darüber hinaus enthält es eine garage_id Spalte, die has_many Beziehung zu ermöglichen. Wenn ich eine neue Garage und füge Autos und Busse schaffen, die alle zu der Datenbank hinzugefügt bekommen, wie erwartet. Allerdings, wenn ich später die Garage Objekt abrufen und überprüfen Sie die road_vehicles Sammlung, ist es leer. Kann mir jemand sagen, was mache ich falsch?
Lösung
Wenn Verbände Einrichtung mit einzelnen Tabellenvererbungsmodellen, müssen Sie das übergeordnete Modell beziehen, so die Verbände einen Tabellennamen ableiten können. Also, in Ihrer Garage
Klasse benötigen Sie:
has_many :vehicles
Wenn Sie die Zuordnung zu RoadVehicles
einschränken möchten, können Sie Bedingungen hinzufügen:
has_many :vehicles, :conditions => {:type => ['Car', 'Bus']}