ruby 一对多关联counter_cache在Rails中无法正确重新加载

cunj1qz1  于 2023-06-05  发布在  Ruby
关注(0)|答案(2)|浏览(296)

创建一个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版本,但都失败了。

hzbexzde

hzbexzde1#

如果你检查ActiveRecord::Locking::Optimisticlink)的源代码,最后一次提交a7dc348的标题是“使用乐观锁定修复父记录的递减计数器缓存”,它是在12小时前创建的。但是,提交消息中没有问题引用,因此没有提示何时引入了该错误。
我能够在我的一个项目中使用activerecord-7.0.4重现这个问题。然后,我将optimistic.rb替换为main的当前版本,它开始工作。

tcomlyy6

tcomlyy62#

添加this link以了解更多详细信息。

相关问题