rails - 多态关联或单表继承

时间:2013-12-10 01:12:25

标签: ruby-on-rails polymorphic-associations sti

我在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单元,油单元或冰箱单元永远不会有很多单位。换句话说,它将始终是has_one关系,例如,当用户创建gps单位时,也会创建一个单位。这似乎有点多余。所以我很伤心。

1 个答案:

答案 0 :(得分:2)

我会说你倒退了 - 有三种非常不同的单位类型,所以可能应该有三种不同的单位类--GpsUnit,OilUnit,FridgeUnit。

然后它取决于 - 如果一个Profile只有一个Unit,那么Profile:

 belongs_to :unit, :polymorphic => true

如果个人资料可以拥有多个单位,或者单位有很多共同的行为,那么STI就是答案。

相关问题