【发布时间】:2013-12-10 01:12:25
【问题描述】:
我在 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_many 单位。换句话说,它始终是一个 has_one 关系,例如,当用户创建一个 gps 单元时,也会创建一个单元。这似乎有点多余。所以我很伤心。
【问题讨论】:
标签: ruby-on-rails polymorphic-associations sti