我目前有以下模型结构和关系

class Fleet < ApplicationRecord
  # properties id, created_at, updated_at

  # A fleet should only consists of the same type, either a fleet or cars or a fleet of trains. Never both
    has_many :cars
    has_many :trains
end

class Car < ApplicationRecord
  # properties id, created_at, updated_at, number_of_gears, is_sports_car

  belongs_to :fleet
end

class Train < ApplicationRecord
  # properties id, created_at, updated_at, number_of_wagons, people_capacity, has_first_calass_section

  belongs_to :fleet
end

我遇到的问题是,车队应该只由同一类型的车队组成,要么是车队,要么是火车。两个都不要。
在当前的机队关系中,似乎两者都有很多联系(或者更像是飞机),在通话的完整性和易用性方面,我必须知道我能打什么电话。
sti不是一个选项,因为汽车和火车上的属性非常不同。还有更多的属性,为了简单起见,我在这个例子中缩短了它们。
在rails中,正确的方法是什么?

最佳答案

我会使用两种不同的模式:Carsfleet和Trainsfleet。两者都可以扩展机队模型,但定义不同的has_many关联。
然后“车”将属于车队,“火车”将属于车队。

10-04 11:20