gpt4 book ai didi

ruby-on-rails-3 - 跟踪关联中某些字段的总和- "sum_cache"

转载 作者:行者123 更新时间:2023-12-04 04:32:01 24 4
gpt4 key购买 nike

我在模型中具有has_many关联的表“orders”和“items”。

class Order < ActiveRecord::Base
has_many :items

class Item < ActiveRecord::Base
belongs_to :order

Material 由“数量”字段组成,订单由“quantity_sum”字段组成,以跟踪关联 Material 数量的总和。

例如:
Order 1 : name='Toms shopping cart', quantity_sum=12
Item 1 : name='T-shirt', quantity=10
Itme 2 : name='Shoes', quantity=2

我一直在寻找一种方法,以便每当添加/编辑/删除新项目时,Order的字段'quantity_sum'都会自动更新。目前,我一直在Item中使用after_save方法来更新Order的“quantity_sum”字段。

除了'after_save'之外,还有其他任何巧妙的方法吗???

类似于用于跟踪关联计数的“counter_cache”,rails是否支持自动跟踪关联中某些字段的总和?

谢谢

最佳答案

从表中删除quantity_sum字段,然后向订单类中添加一个quantity_sum方法,以对quantity_values求和

class Order < ActiveRecord::Base
has_many :items

def quantity_sum
self.items.sum(:quantity)
end
end

应该做的把戏。然后,您需要做的就是删除所有可能更新quantity_sum字段的代码。您会发现,由于方法的名称与字段名称相同(您一定不要忘记删除),因此您不必重构任何使用该方法的代码。

显然,您需要注意不要不必要地像在系统中所有订单的列表中那样不必要地使用此字段,因为这在数据库上会非常繁琐。好了几百条记录,但您会注意到成千上万个订单的性能问题。

不要忘记从订单表中删除那个quantity_sum字段

关于ruby-on-rails-3 - 跟踪关联中某些字段的总和- "sum_cache",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6979639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com