Ruby on rails 对作为一个组的记录集合进行建模
我正在寻找Ruby-Like(Rails 4/5)中具体或抽象方法的方向,以模拟以下需求或用户故事: 给定一个模型,我们用以下属性将其称为PurchaseOrder:Ruby on rails 对作为一个组的记录集合进行建模,ruby-on-rails,ruby,ruby-on-rails-4,domain-data-modelling,Ruby On Rails,Ruby,Ruby On Rails 4,Domain Data Modelling,我正在寻找Ruby-Like(Rails 4/5)中具体或抽象方法的方向,以模拟以下需求或用户故事: 给定一个模型,我们用以下属性将其称为PurchaseOrder: 产量 从库存中提取的金额 安置日期 交货日期 产品标识 客户识别码 作为一名用户,我希望能够查看这些采购订单的表列表,并在必要时对它们进行分组 详细信息:当对PurchaseOrder的集合进行分组时,该分组集合的行为应与PurchaseOrder完全相同,因为它必须在表中显示为记录,筛选操作应在分组的记录上工作,就像在单个P
- 产量
- 从库存中提取的金额
- 安置日期
- 交货日期
- 产品标识
- 客户识别码
Class PurchaseOrder < ApplicationRecord
belongs_to :group, class_name: PurchaseOrder.model_name.to_s, inverse_of: :purchase_orders
# purchase order can represent a "group" of purchase orders
has_many :purchase_orders, inverse_of: :group, foreign_key: :group_id
end
Class PurchaseOrder
通过这种方式,它将实现在表视图中轻松显示的目的,过滤分页和排序将立即生效,只需使用group_id nil对记录进行范围限定,就可以将分组的记录从表中删除
然而,我预见到了直接的缺点:
谢谢。我会将其分为两种型号,一种是PurchaseOrderGroup,另一种是PurchaseOrder
class PurchaseOrderGroup < ApplicationRecord
has_many :purchase_orders
belongs_to :product
def aggregate_pos
PurchaseOrder.where(purchase_order_group_id: self.id).
group(:purchase_order_group_id).
pluck('sum(amount_to_produce), min(delivery_date), ...')
end
end
class PurchaseOrder < ApplicationRecord
belongs_to :purchase_order_group
end
class PurchaseOrderGroup
我将为每个PurchaseOrder创建一个PurchaseOrderGroup,即使只有一个PurchaseOrder,它维护相同的接口。然后,您可以在PurchaseOrderGroup上定义委托方法,这些方法获取子级的适当总和、最小值、最大值等-聚合查询应该可以很快完成这项工作。请参见上面的聚合_pos()方法。很容易在PurchaseOrderGroup类中缓存结果。删除或添加PurchaseOrder对象很容易,只需再次调用aggregate_pos()
这也解决了产品标识的难题,只需将该属性放在组上,而不是PurchaseOrder上。这样,同一组中的两个PurchaseOrder不可能有不同的产品ID