ruby-on-rails - Rails:更新(has_many)子记录时更新父属性
问题描述
我有以下结构
class Order < ActiveRecord::Base
has_many :order_lines, inverse_of: :order, validate: false, autosave: true
end
class OrderLine < ActiveRecord::Base
belongs_to :order, inverse_of: :order_lines, touch: true, counter_cache: :line_count
end
我希望Order
在更新 children( OrderLine
) 记录时更新 parent() 属性。假设Order Total
在更新OrderLine
价格/数量时进行更新。
我可以在关卡上添加回调或after_save/commit
在OrderLine
关卡上添加after_commit
回调(因为touch: true
)Order
来计算和更新total
.
但是,当行数很大(超过 100 行)时,它会在每行更新时执行回调,这会影响性能。此外,还有一些特性流,其中单个/多行在不更新父(订单)记录的情况下得到更新。所以我确实需要在线路级别进行回调,以便在这种情况下更新总数。
有没有办法以更高效的方式更新父属性(总计)?
解决方案
推荐阅读
- neural-network - 训练准确率和验证准确率之间的关系
- javascript - 我已经编写了自己的 npm 模块,当我将其导入新项目时,所有资产路径都是相对于项目而不是模块内部的?
- c# - 插入查询将空白记录插入数据库
- javascript - 用javascript点击svg元素
- aws-lambda - Alexa 如何在要求用户回答之前的问题之前等待一分钟?
- oh-my-zsh - ZSH ᐅ 字符显示为安装了 Powerline 字体的框
- python - 检查用户列表是否对消息 discord.py rewrite 做出反应
- c - 预处理 Linux 源代码并保存到另一个目录
- emacs - org babel tangle 提取 src 代码但遇到错误的 stingp 错误
- amazon-web-services - Scraper 在上传到 aws 之前一直有效(.jp 链接除外)