module ArchiveModel module Cache require 'active_support/concern' extend ActiveSupport::Concern included do after_save :cache_tag_ids, :do_before_save after_destroy :do_before_save before_destroy :cache_tag_ids end def cache_tag_ids if !@skip_callback && self.class == ArchiveFile @tag_ids = self.tag_ids @org_tag_ids = self.org_tag_ids @category_id = self.category_id @org_category_id = self.org_category_id end end def do_before_save unless @skip_callback if self.class == SubPart ArchiveCache.where(parent_id: /^#{self.id}/).delete elsif self.class == ArchiveFile || (self.class == Page && self.module == "archive") if self.class == ArchiveFile tmp_tag_ids = (Array(@tag_ids) + Array(@org_tag_ids)).uniq tmp_cat_ids = (Array(@category_id) + Array(@org_category_id)).uniq Thread.new do ArchiveFileFeedCache.where(:uid.in => ArchiveFileFeed.any_of([{:tag_ids.in => tmp_tag_ids.collect{|v| v.to_s}},{:category_ids.in => tmp_cat_ids.collect{|v| v.to_s}}]).pluck(:uid)).each do |cache| cache.regenerate end end end ArchiveCache.all.delete end end end end end