我在扫地机中有以下方法:
def expire_topic_articles_cache_for topic_id
key = fragment_cache_key :controller => :articles, :action => :index, :topic_id => topic_id
Rails.logger.debug "主题 #{topic_id} 的文章列表缓存过期"
Rails.logger.debug “使用键 #{key}”
# 由于片段覆盖多个页面,所以使用正则表达式
expire_fragment %r{#{key}}
结尾
问题在于调用 fragment_cache_key。它在一个代码路径中返回正确的键,但在另一个代码路径中返回 nil,两次都使用相同的 topic_id 调用,两次都由同一个控制器触发,但来自不同的观察模型。
这对我来说毫无意义。我希望 fragment_cache_key 为相同的输入返回相同的结果。考虑到使用相同的缓存配置(并且在两个代码路径中都是相同的),它应该没有副作用。