在rails中存储过去的关系

时间:2011-07-01 12:23:27

标签: ruby-on-rails activerecord

我有一个物品跟踪系统,它有一个物品模型,与发票有一对多的关系。这意味着一张发票可以包含多个商品,一件商品可以属于一张发票。

我现在需要将一个Item返回库存,对于我的系统来说意味着将传递的布尔字段设置为false,但除非我将invoice_id设置为nil,否则它仍将显示为等待交付给客户并且如果我没有,那么我的系统将没有任何记录为该项目的客户开具发票。

我能看到这种运作良好的唯一方法是有一个previous_invoices字段,用于存储其所在发票的ID。这样做可以从项目的角度来看,Item.previous_invoices是有意义的,但它不会出现在Invoice.items中,并且为了获得已经返回的项目,我需要进行具有LIKE条件的数据库搜索。

我宁愿不使用多对多关联,因为只返回需要使用该表的项目的一小部分。

无论如何在铁轨中或使用可以处理两侧发现的宝石这样做?

1 个答案:

答案 0 :(得分:1)

Invoice和Item 之间的关系是多对多,而你只是因为避免实现它而给自己造成了困难。最干净的解决方案是一个InvoiceItems表,其中包含一个“返回”字段,您可以在提取发票项目时检查,也许以发票的HABTM与项目关联为条件。