2

我的应用程序有两个组件,大部分是数据输入/跟踪和数据报告。

我有一个基本的数据跟踪对象,我们称之为 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

我已经将连接的位置从一个模型移动到另一个模型......我想我已经减少了我的应用程序中的表数量,总体而言?

4

0 回答 0