我一直在想,假设我有一个属性的模型,在每个实例中都依赖于其他实例中的相同属性。最好的例子是列表中项目的订单属性。
更新其余项目订单属性的最佳位置是在before_update回调方法中,如果您同时拥有该项目的旧值和新值。
但是现在每当你更新列表中的其他项目时,将再次调用回调,并再次...
我正在寻找一种优雅的解决方法。
我听说过:update_without_callbacks方法,但我不想使用私有方法,而且我觉得添加额外的属性也没必要。
有什么好主意吗?提前谢谢!
答案 0 :(得分:1)
一种方法是使用update_all
批量设置所有其他项目的顺序。
通过这种方式,您可以有效地将查询数量限制为1并防止任何回调被触发。
答案 1 :(得分:1)
我觉得你必须跨条目进行这种类型的更新,这表明你没有正确地概念化你的问题。为什么不创建具有order属性的List模型,然后在List模型和Item模型之间创建一对多关系。这样,只有一个地方可以更新订购信息,而且不需要复杂和脆弱的回调。