轨道has_many父关系保存后未更新



Rails 5.2的简化代码。

一个非常简单的Base类,它累加了其 Items 的一些值。

class Base < ApplicationRecord
has_many :items
def values
children.map(&:value).sum
end
end

修改自身的Item类:

class Item < ApplicationRecord
belongs_to: :base
def increment
puts parent.values # == 0
self.value = 10
save!
puts parent.values # == 0 #???
end
end

调用some_item.increment时,我希望第二个parent.values返回 10,但事实并非如此。 在下一次调用时,它确实返回 10,不知何故,这是为第一次调用缓存的。

是否存在一些隐藏的缓存机制,或者save!延迟更改?

您必须使用reload!重新加载父对象

class Item < ApplicationRecord
belongs_to: :base
def increment
puts parent.values # == 0
self.value = 10
save!
parent.reload!
puts parent.values
end
end

最新更新