Ruby on Rails基于参数的实例变量缓存

Sub*_*dra 5 ruby-on-rails

我将用户杂项数据存储在user_data表中,当我使用我定义的关联检索该数据时,我实际上是使用像这样的Ruby实例变量缓存来缓存它.

def user_data(user_id)
  @user_data || = User.find(user_id).data 
end
Run Code Online (Sandbox Code Playgroud)

但实例变量@user_data只会在第一次为nil时分配值,一旦它为用户保存数据,就让user_id等于1,当我在这个方法中传递user_id 2时,它返回user_id 1的数据,因为它不会为它分配新值所以我的问题是我如何根据函数的参数缓存它的值.

Ale*_*ein 7

看一下Caching with Rails指南.Rails可以缓存从整页缓存到片段缓存的多个级别的数据,我强烈建议您阅读所有这些页面,以便您可以做出感知选择.

对于低级缓存,您可以这样做:

@user_data = Rails.cache.fetch("user_#{user_id}", expires_in: 1.hour) do
  User.find(user_id).data
end
Run Code Online (Sandbox Code Playgroud)

默认情况下,Rails将缓存存储在磁盘上,但您可以设置内存缓存,内存存储等.