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