我在STI,多态关联或类型表之间徘徊.我已经有一个包含以下字段的单位表:
name
account_id
speed_limit
is_speeding
activation_state
unit_status_id
实际上有三种不同的单位:gps单位,石油单位和冰箱单位.当用户登录时,他们的网页会根据它所在的单位有条件地改变.这三个单元都有一个帐户,activation_state和unit_status_id,以及其他字段.但只有gps单元有一个speeding_limit或is_speeding字段.
我应该使用多态关联:
class Unit
belongs_to :unitable, :polymorphic => true
end
class RefrigeratorUnit < ActiveRecord::Base
has_one :units, as: => :unitable
end
class OilUnit < ActiveRecord::Base
has_one :units, as: => :unitable
end
class GpsUnit < ActiveRecord::Base
has_one :units, as: => :unitable
end
或者我应该使用单表继承?
class Unit < ActiveRecord::Base
end
class GpsUnit < Unit
end
class RefrigeratorUnit < Unit
end
class OilUnit < Unit
end
最初我倾向于STI,但冰箱和石油单位没有速度限制,这意味着它们将永远是零值.所以我开始实施多态关联,但后来意识到gps单位,石油单位或冰箱单位永远不会有_many单位.换句话说,它将始终是has_one关系,例如,当用户创建gps单位时,也会创建一个单位.这似乎有点多余.所以我很伤心.
最佳答案 我会说你倒退了 – 有三种非常不同的单位类型,所以可能应该有三种不同的单位类–GpsUnit,OilUnit,FridgeUnit.
然后它取决于 – 如果一个Profile只有一个Unit,那么Profile:
belongs_to :unit, :polymorphic => true
如果一个配置文件可以有很多单元,或者单元有很多共同的行为,那么可能是STI的答案.