Has_Many com hierarquia de vários níveis e herança de mesa única
-
22-09-2019 - |
Pergunta
No meu aplicativo Rails, tenho uma hierarquia de vários níveis do seguinte tipo:
class Vehicle < ActiveRecord::Base end
class RoadVehicle < Vehicle end
class Car < RoadVehicle end
class Buss < RoadVehicle end
Então eu tenho uma classe referenciando o nível intermediário como assim:
class Garage < ActiveRecord::Base
has_many :road_vehicles
end
Neste exemplo simplificado, dei à tabela de veículos uma coluna de tipo para ativar a herança de tabela única. Além disso, ele contém uma coluna GARAGE_ID, para ativar o relacionamento Has_Many. Quando crio uma nova garagem e adiciono carros e ônibus, todos são adicionados ao banco de dados conforme o esperado. No entanto, quando eu recuperar o objeto de garagem e inspecionar a coleção Road_vehicles, ele está vazio. Alguém pode me dizer o que estou fazendo de errado?
Solução
Ao configurar associações com modelos de herança de tabela única, você precisa consultar o modelo pai para que as associações possam inferir um nome de tabela. Então, em seu Garage
aula que você precisa:
has_many :vehicles
Se você deseja restringir a associação a RoadVehicles
, você pode adicionar condições:
has_many :vehicles, :conditions => {:type => ['Car', 'Bus']}