我将用户的杂项数据存储在user_data表中,当我使用我定义的关联检索该数据时,我实际上使用Ruby实例变量缓存来缓存它,就像这样。
def user_data(user_id)
@user_data || = User.find(user_id).data
end
但实例变量@user_data
只有在为零时才会第一次被分配值,一旦它为用户保存了数据,比如说user_id等于1,当我在这个方法中传递user_id 2时,它会返回user_id 1的数据,因为它不会为它分配新的值,所以我的问题是如何根据函数的参数缓存它的值。
看看《使用Rails缓存》指南。Rails可以在多个级别上缓存数据,从全页面缓存到片段缓存,我强烈建议您阅读所有这些页面,以便做出明智的选择。
对于低级缓存,您可以这样做:
@user_data = Rails.cache.fetch("user_#{user_id}", expires_in: 1.hour) do
User.find(user_id).data
end
默认情况下,Rails将缓存存储在磁盘上,但您可以设置memcache、内存存储等。
您可以为基于键的无形变量缓存使用哈希。我认为这正是你想要的。
def user_data(user_id)
@user_data ||= {}
@user_data[user_id.to_i] || = User.find(user_id).data
end