我的应用程序有两个组件,大部分是数据输入/跟踪和数据报告。
我有一个基本的数据跟踪对象,我们称之为 Meter:
class Meter < ActiveRecord::Base
has_many :activity_records
end
我有一组不同的报告对象,如表格报告、图表、小部件等。所有这些对象,每个用户配置,都将仪表集合称为数据源。
我通过一个连接表将这种关系建模为has_and_belongs_to_many
:一个 Widget 有很多 Meters;Meters 可以被许多 Widget 引用。
class Widget < ActiveRecord::Base
has_and_belongs_to_many :meters
end
现在,我认为 Meters 实际上不需要知道哪些报告对象引用了它们。仪表应该能够愉快地存在,收集数据并(通过服务对象)响应数据请求。我永远不应该提及@meter.widgets
.
那么,我是否需要在 Meter 模型中为所有不同的报告对象声明六种不同的 habtm 关系?
具体问题:
1. 省略对 Meters 的 habtm 声明是否会产生意想不到的后果?
2. 有没有更好的方法来设计这种关系?
关于第二个问题,我玩过 a 的概念,MeterSet
但发现它有点过度设计:
class Widget < ActiveRecord::Base
has_one :meter_set, as: :requester
has_many :meters, through: :meter_set
end
class MeterSet < ActiveRecord::Base
belongs_to :requester, polymorphic: true
has_and_belongs_to_many :meters
end
我已经将连接的位置从一个模型移动到另一个模型......我想我已经减少了我的应用程序中的表数量,总体而言?