0

我在我的应用程序中使用 rails cache 来缓存 Active Record 查询。我使用了一个通用的方法Rails.cache.fetch,但它没有获取密钥。我在这里错过了什么吗?

author = cache_fetch("author_id:#{current_user.id}") do
  Author.find(current_user.id)
end

在我的库文件中:

cache_fetch(key)
  Rails.cache.fetch(key,expires_in: 30.minutes)
end
4

1 回答 1

3

#fetch获取一个块,如果在缓存中找不到键,则执行该块并缓存其返回值。你应该使用:

cache_fetch(key, options = {}, &block)
  Rails.cache.fetch(key, options.reverse_merge(expires_in: 30.minutes), &block)
end

如果您不通过该块,那么 Rails 将不知道在未命中的情况下要缓存什么,因此不会有任何东西可以返回。添加可选options键允许您传递覆盖cache_fetch,然后将传递到#fetch,同时仍提供默认值。

于 2013-07-08T07:49:22.840 回答