module BulletinModel 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 self.class == Bulletin @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 if self.class == SubPart AnnsCache.where(parent_id: /^#{self.id}/).delete elsif self.class == Bulletin || (self.class == Page && self.module == "announcement") if self.class == Bulletin 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 BulletinFeedCache.where(:uid.in => BulletinFeed.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)).to_a.each do |cache| cache.regenerate end end end AnnsCache.all.delete end end end end