2010-01-25 7 views
6

Trong ứng dụng Rails của tôi, tôi có một hệ thống phân cấp đa cấp của các loại sau đây:has_many với hệ thống phân cấp đa cấp và đơn bảng thừa kế

class Vehicle < ActiveRecord::Base end 
class RoadVehicle < Vehicle end 
class Car < RoadVehicle end 
class Buss < RoadVehicle end 

Sau đó, tôi có một lớp học tham khảo các cấp trung như vậy:

class Garage < ActiveRecord::Base 
    has_many :road_vehicles 
end 

Trong ví dụ đơn giản này, tôi đã cung cấp cho bảng xe một cột loại để cho phép kế thừa bảng đơn. Ngoài ra, nó chứa cột garage_id, để kích hoạt mối quan hệ has_many. Khi tôi tạo một nhà để xe mới và thêm xe hơi và xe buýt, tất cả sẽ được thêm vào cơ sở dữ liệu như mong đợi. Tuy nhiên, khi tôi lấy lại vật thể trong nhà để xe và kiểm tra bộ sưu tập road_vehicles, nó trống. Bất cứ ai có thể cho tôi biết những gì tôi đang làm sai?

Trả lời

6

Khi thiết lập liên kết với mô hình kế thừa bảng đơn, bạn cần tham chiếu đến mô hình gốc để các liên kết có thể suy ra tên bảng. Vì vậy, trong lớp Garage của bạn, bạn cần:

has_many :vehicles 

Nếu bạn muốn hạn chế các hiệp hội để RoadVehicles, bạn có thể thêm điều kiện:

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