diff --git a/app/models/keyword_mute.rb b/app/models/keyword_mute.rb index f94e0f7951c..8b54ad696eb 100644 --- a/app/models/keyword_mute.rb +++ b/app/models/keyword_mute.rb @@ -15,16 +15,24 @@ class KeywordMute < ApplicationRecord validates_presence_of :keyword - def self.matcher_for(account) - Rails.cache.fetch("keyword_mutes:matcher:#{account}") { Matcher.new(account) } + after_commit :invalidate_cached_matcher + + def self.matcher_for(account_id) + Rails.cache.fetch("keyword_mutes:matcher:#{account_id}") { Matcher.new(account_id) } + end + + private + + def invalidate_cached_matcher + Rails.cache.delete("keyword_mutes:matcher:#{account_id}") end class Matcher attr_reader :regex - def initialize(account) + def initialize(account_id) re = [].tap do |arr| - KeywordMute.where(account: account).select(:keyword, :id).find_each do |m| + KeywordMute.where(account_id: account_id).select(:keyword, :id).find_each do |m| arr << Regexp.escape(m.keyword.strip) end end.join('|')