我有不同的模块,如绘画,chasis_repair,over_oiling部分 每个模块都有单独的账单表,例如painting_bills,chasis_repair_bills,over_oiling_bills
现在我必须为Delivery模块创建账单。 delivery module与其他模块有关系(painting,chasis_repair,over_oiling) 交货单是一个综合的绘画账单,chasis_repair,over_oiling部分账单和交付特定账单
注意:绘画,chasis_repair,over_oiling部分账单和交付特定账单是可选的。
示例1:交货单包含绘画和chasis_repair账单 示例2:交货单包含过度绘制,绘画和交付特定账单
class DeliveryBill < ActiveRecord::Base
attr_accessible :date, :total_amount, :discount
has_many :delivery_detail_bills
end
我很难构建delivery_detail_bills模型,我有两个想法
1)
id
date
tot_amount
bill_item_type # name of section as text for example painting/chasis_repair/over_oiling/other
bill_item_amount # for example, respective total amount of painting/chasis_repair/over_oiling/other
bill_item_klass # for example, here I store the respective class name, PaintingBill, ChasisRepairBill...
bill_item_klass_id # id value of respective object
通过这种方式,没有关系表。我通过bill_item_type列处理交付特定的结算项目
如果我想去相应的账单,我必须手动使用bill_item_klass,bill_item_klass_id列构建相应的链接
2)创建has_many:通过delivery_bill与painting_bills之间的关联表,chasis_repair_bills
class DeliveryBill < ActiveRecord::Base
has_many :painting_bills, :through => :delivery_bill_painting_bills
has_many :chasis_repair_bills, :through => :delivery_bill_chasis_repair_bills
.....
end
class DeliverBillPaintingBill < ActiveRecord::Base
belongs_to :delivery_bill
belongs_to :painting_bill
end
class DeliverBillChasisRepairBill < ActiveRecord::Base
belongs_to :delivery_bill
belongs_to :chasis_repair_bill
end
....
这里的关系非常清楚,但如果按照这种方式,我就无法处理“其他”的账单,因为没有关于额外/其他账单的关联表。 此方法将增加表计数
哪一个是性能明智的最佳解决方案还是还有其他更好的解决方案?