has_many с многоуровневой иерархией и наследованием одной таблицы

StackOverflow https://stackoverflow.com/questions/2136324

Вопрос

В моем приложении 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']}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top