在保持计数器缓存的同时更新连接表记录

时间:2015-11-16 14:04:07

标签: ruby-on-rails ruby-on-rails-4 caching sqlite

我有一个名为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

0 个答案:

没有答案