我有一個車型的型號:Rails的:如何在車輛及其所有類型
class Vehicle < ActiveRecord::Base
validates_presence_of :num_of_wheels
validates_presence_of :make
validates_presence_of :model
end
從這節課,我想有車輛類型的可擴展的數字,如「乘用車」 ,「摩托車」,「卡車」,每個都有自己獨特的強制性屬性。例如,PassengerCar可能需要門的數量,但不適用於摩托車類型。與此同時,摩托車和passenger_cars在創建時應該要求/繼承Vehicle的強制性屬性。
這裏的關鍵是我不能真正預測可能發明或需要存儲的不同類型車輛的數量。所以,我需要一種可擴展的方式來添加新的車輛類型。此外,就用戶界面和視圖而言,如果我的類型不能從下拉菜單中獲得,並且使用db填充Vehicle類型,並且可以創建新的Vehicle類型有反射回用戶界面。
用Rails建立這種關係的最佳方式是什麼?我正在考慮使用has_one:through關係,但我不確定這是最好的方法。例如,車輛將被分配給運營商。而且一個人可以在同一時間運行只有一輛車......所以,我可以說:
class Vehicle < ActiveRecord::Base
has_one :motorcycle, :through => :vehicle_type
has_one :passenger_car, :through => :vehicle_type
has_many :vehicle_types
validates_presence_of :num_of_wheels
validates_presence_of :make
validates_presence_of :model
end
class VehicleType < ActiveRecord::Base
belongs_to :vehicle
belongs_to :passenger_car
belongs_to :motorcycle
end
class PassengerCar < ActiveRecord::Base
belongs_to :vehicle_type
validates_presence_of :doors
end
class Motorcycle < ActiveRecord::Base
belongs_to :vehicle_type
validates_presence_of :saddlebags
end
但是,似乎笨拙不得不每一個可能的類型添加到車輛的車型,並且由於運營商不僅可以每次駕駛一輛汽車時,將所有其他類型的汽車放置在Vehicle模型的has_one語句中似乎是多餘的。
任何想法非常感謝!
你可能想考慮閱讀單表繼承機制。這裏有一篇很好的文章描述它:http://code.alexreisner.com/articles/single-table-inheritance-in-rails.html – rjz 2012-04-16 00:55:13