1

我们的 rails 3.1.4 应用程序中有一张发票。发票可以从一个报价或一个或多个租赁预订项目生成,但不能同时从这两者生成。因此,一张发票要么有一个报价,要么有许多租赁使用项目。现在我们正在考虑创建一个带有发票 ID 和人工字段 invoice_item_id(可以是报价 ID 或租赁使用项目 ID)的中间表来存储发票的报价或租赁使用项目。但是,我们不确定发票和报价之间以及发票和租赁使用项目之间的关系。我们不能说 invoice has_one 报价,因为有些发票没有报价。另一方面,我们不能说发票 has_many 租赁使用项目,因为有些可能没有。在 rails 3.1.4 中处理这种关系的更好方法是什么?非常感谢。

4

2 回答 2

1

如上所述,IMO 使用 has_one/has_many 关系应该没问题。即使没有填充引用,使用这些关系也是有效的。

您可以通过 ActiveRecord 验证处理互斥部分:http: //guides.rubyonrails.org/active_record_validations_callbacks.html#validations-overview

class Invoice < ActiveRecord::Base

  has_one :quote 
  has_many :lease_usage_items

  validates :cannot_have_quote_and_lease_usage_items
于 2012-05-20T17:34:57.990 回答
1

看看多态关联:“使用多态关联,一个模型可以在一个关联上属于多个其他模型”,因此在您的情况下invoce_item_id属于可开票(报价或租赁使用项目)。

于 2012-05-20T17:13:25.047 回答