has_many с многоуровневой иерархией и наследованием одной таблицы - PullRequest
6 голосов
/ 26 января 2010

В моем приложении 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, она пуста. Может кто-нибудь сказать мне, что я делаю не так?

1 Ответ

6 голосов
/ 26 января 2010

При настройке ассоциаций с моделями наследования одной таблицы необходимо обратиться к родительской модели, чтобы ассоциации могли вывести имя таблицы. Итак, в вашем Garage классе вам нужно:

has_many :vehicles

Если вы хотите ограничить ассоциацию RoadVehicles, вы можете добавить условия:

has_many :vehicles, :conditions => {:type => ['Car', 'Bus']}
...