如何从常用方法使用Rails.cache.fetch?

时间:2013-07-08 07:38:01

标签: ruby-on-rails ruby-on-rails-3 caching

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

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

在我的lib文件中:

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

1 个答案:

答案 0 :(得分: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,同时仍然提供默认值。