首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在before_update中更新模型

在before_update中更新模型
EN

Stack Overflow用户
提问于 2012-04-05 02:20:36
回答 2查看 418关注 0票数 2

我一直在想,假设我有一个模型,它的属性在每个实例中都依赖于其他实例中的相同属性。最好的例子是列表中项目的order属性。

更新其余商品的order属性的最佳位置是在before_update回调方法中,因为您同时拥有商品的旧值和新值。

但是现在,每当您更新列表中的其他项时,回调都会被一次又一次地调用……

我正在寻找一种优雅的方法来解决这个问题。

我听说过:update_without_callbacks方法,但我不想使用私有方法,而且我觉得没有必要添加额外的属性。

有什么好主意吗?提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-05 02:26:05

一种方法是使用update_all批量设置所有其他项目的顺序。

这样,您可以有效地将查询的数量限制为一个,并防止触发任何回调。

https://github.com/rails/rails/blob/83e42d52e37a33682fcac856330fd5d06e5a529c/activerecord/lib/active_record/relation.rb#L274

票数 1
EN

Stack Overflow用户

发布于 2012-04-05 02:53:49

我觉得你必须跨条目进行这种类型的更新,这表明你还没有正确地概念化你的问题。为什么不创建一个具有order属性的列表模型,然后在列表模型和商品模型之间创建一对多关系。这样,只有一个地方可以更新排序信息,而不需要复杂而脆弱的回调。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10017042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档