has_many с многоуровневой иерархией и наследованием одной таблицы
-
22-09-2019 - |
Вопрос
В моем приложении Rails у меня есть многоуровневая иерархия следующего типа:
class Vehicle < ActiveRecord::Base end
class RoadVehicle < Vehicle end
class Car < RoadVehicle end
class Buss < RoadVehicle end
Затем у меня есть класс, ссылающийся на средний уровень, например:
class Garage < ActiveRecord::Base
has_many :road_vehicles
end
В этом упрощенном примере я присвоил таблице транспортных средств столбец типа, чтобы включить наследование одной таблицы.Кроме того, он содержит столбец Garage_id, позволяющий включить связь has_many.Когда я создаю новый гараж и добавляю автомобили и автобусы, все они добавляются в базу данных, как и ожидалось.Однако, когда я позже извлекаю объект гаража и проверяю коллекцию road_vehicles, он оказывается пустым.Может ли кто-нибудь сказать мне, что я делаю неправильно?
Решение
При настройке ассоциаций с моделями наследования одной таблицы вам необходимо обратиться к родительской модели, чтобы ассоциации могли вывести имя таблицы.Итак, в вашем Garage
класс, который вам нужен:
has_many :vehicles
Если вы хотите ограничить ассоциацию RoadVehicles
, вы можете добавить условия:
has_many :vehicles, :conditions => {:type => ['Car', 'Bus']}