私は車両モデルを持っています:
class Vehicle < ActiveRecord::Base
validates_presence_of :num_of_wheels
validates_presence_of :make
validates_presence_of :model
end
このクラスから、「乗用車」、「オートバイ」、「トラック」など、それぞれ独自の必須属性を持つ、スケーリング可能な数の車両タイプを用意したいと考えています。たとえば、乗用車にはドアの数が必要な場合がありますが、それはオートバイ タイプには適用されません。同時に、オートバイと乗用車の両方が、作成時に車両の必須属性を必要とする/継承する必要があります。
ここで重要なのは、発明される可能性のある、または保管する必要があるさまざまな種類の車両の数を実際に予測できないことです。そのため、新しい車両タイプを追加するためのスケーラブルな方法が必要です。また、UI とビューに関しては、たとえば、私のタイプがドロップダウン メニューから利用できない場合に、新しい車両タイプを作成し、db に車両タイプを入力させて、それをUIに反映させます。
Rails とのこの関係をモデル化する最良の方法は何でしょうか? has_one :through 関係を使用することを考えていますが、それが最善の方法かどうかはわかりません。たとえば、ビークルはオペレーターに割り当てられます。そして、人は一度に 1 台の車両しか操作できません...つまり、次のように言えます。
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
ただし、考えられるすべてのタイプを車両モデルに追加する必要があるのは扱いにくいように思われます。オペレーターは一度に 1 つの車両しか運転できないため、他のすべての車両タイプを車両モデルの :has_one ステートメントに入れるのは冗長に思えます。
どんな考えでも大歓迎です!