我的应用程序有两个组件,大部分是数据输入/跟踪和数据报告。
我有一个基本的数据跟踪对象,我们称之为Meter:
class Meter < ActiveRecord::Base
has_many :activity_records
end
我有一组不同的报表对象,如表格报表,图表,小部件等。根据用户配置,所有这些对象都将Meters的集合称为数据源。
我通过连接表将此关系建模为has_and_belongs_to_many
:一个Widget有很多米;许多小部件都可以引用米。
class Widget < ActiveRecord::Base
has_and_belongs_to_many :meters
end
现在,我不认为Meters实际上需要知道哪些报告对象引用它们。仪表应该能够轻松存在,收集数据和(通过服务对象)响应数据请求。我永远不应该提到@meter.widgets
。
那么,在Meter模型中,我是否需要为所有不同的报告对象声明六种不同的habtm关系?
具体问题:
1.忽略对仪表的habtm声明会产生意想不到的后果吗?
2.有没有更好的方法来设计这种关系?
关于第二个问题,我使用了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
我已将联接的位置从一个模型移动到另一个模型......我想我已经减少了应用程序中的表数总体而言?