创建一个Post模型,包含lock_version和comments_count列,以及一个has_many关系with:comments。使用counter_cache = true创建一个带有lock_version列和belongs_to关系的Comment模型:post。
class Post < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :post, counter_cache: true
end
post = Post.create!
comment = Comment.create(post)
puts post.reload.comments_count # 1 (correct)
Comment.last.destroy
puts post.reload.comments_count # 1 (should be 0 - incorrect)
我试过修改Rails和Ruby版本,但都失败了。
2条答案
按热度按时间hzbexzde1#
如果你检查
ActiveRecord::Locking::Optimistic
(link)的源代码,最后一次提交a7dc348的标题是“使用乐观锁定修复父记录的递减计数器缓存”,它是在12小时前创建的。但是,提交消息中没有问题引用,因此没有提示何时引入了该错误。我能够在我的一个项目中使用
activerecord-7.0.4
重现这个问题。然后,我将optimistic.rb
替换为main
的当前版本,它开始工作。tcomlyy62#
添加this link以了解更多详细信息。