Rails删除父模型,但仍然访问子模型

时间:2014-01-09 15:44:11

标签: ruby-on-rails database postgresql

我有客户和发票。用户可以删除客户,但不能删除发票。

问题是当客户被删除时我不能再做了

invoice.customer.name

因为客户是零。

我在绘图板上有一些解决方案

  1. 在发票实例上保存有关客户的一些信息 发票。

  2. 不删除客户,但使用布尔值将其隐藏在用户之外 领域。这样客户实例仍然存在。

  3. 我知道这个问题可能会被关闭,因为答案可能是固执己见的。 Rails对几乎所有内容都非常自以为是。关于这个问题,我从未见过这样的意见,所以:

    在这种情况下,轨道最佳做法是什么?

    (如果你有更好的解决方案,我希望看到它)

2 个答案:

答案 0 :(得分:2)

如果您想设置deleted_at标志,我建议您使用偏执狂宝石。

https://github.com/radar/paranoia

这正是您的第二个选项,并实现了您可能需要的所有范围。

答案 1 :(得分:1)

你的第二个解决方案似乎是最好的IMO。

不是删除客户,而是在客户数据库上引入DELETED标志(然后将其添加为default_scope以忽略DELETED = true的客户)

通过这种方式,您可以保持关系完好无损。如果您有大量客户负载,您可能需要考虑归档机制,但我不担心。