2010-01-25 2 views
6

В моем приложении Rails У меня есть иерархия многоуровневую следующего вида:has_many с иерархией многоуровневой и одной таблицы наследования

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

ответ

6

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

has_many :vehicles 

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

has_many :vehicles, :conditions => {:type => ['Car', 'Bus']} 
Смежные вопросы