首页 > 解决方案 > 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/commitOrderLine关卡上添加after_commit回调(因为touch: trueOrder来计算和更新total.

但是,当行数很大(超过 100 行)时,它会在每行更新时执行回调,这会影响性能。此外,还有一些特性流,其中单个/多行在不更新父(订单)记录的情况下得到更新。所以我确实需要在线路级别进行回调,以便在这种情况下更新总数。

有没有办法以更高效的方式更新父属性(总计)?

标签: ruby-on-railsactiverecordassociationshas-many

解决方案


推荐阅读