我有一个名为Listings的3向连接表,其中包含以下关联:
belongs_to :stage, counter_cache: true, touch: true
belongs_to :list, touch: true
belongs_to :record
List模型有很多阶段,所以这个Listing类的想法是能够将记录移动到它所在的List的不同阶段。
然而,当我更新列表的阶段时,它会增加新阶段的计数器缓存,并将旧阶段的计数器缓存减少2而不是1。
E.g。
list = List.first
stage1, stage2 = [list.stages.first, list.stages.second] # Assume listing_counts of stage1 and stage2 are 1 and 0, respectively
listing = list.listings.first # Assume that this listing belongs to stage1
# Update the stage of a listing
listing.update(stage: stage2)
stage1.listings_count # Expected: 0, Actual: -1
stage2.listings_count # Expected: 1, Actual: 2
有什么方法可以刷新计数器缓存吗?删除触摸:true或尝试执行stage.reload没有工作。
编辑:
我已经能够通过销毁列表和读取记录来解决这个问题,而不是直接更新列表,但我仍然希望找到一种方法来做到这一点,如果可能的话,不删除列表
临时修复:
# Instead of listing.update(stage: stage2)
record = listing.record
listing.destroy
stage2.records << record