我已经记住了一个对象,并考虑向该变量添加缓存..如果速度很重要,这是必需的吗?
def user_details
@_user_details ||= user.profiles.includes(":asso_1,:asso_2,:asso_3")
end
添加缓存
def user_details
data = Rails.cache.fetch("#{user.updated_at.to_i}") do
@_user_details ||= user.profiles.includes(":asso_1,:asso_2,:asso_3")
end
@_user_details = data
end
更改缓存密钥; 让它像这样: users_#{user.id}
;
然后,您需要在用户更新时删除此密钥。
此外,您的user_details方法应如下所示:
def user_details
@_user_details ||= Rails.cache.fetch("users_#{user.id}") do
user.profiles.includes(":asso_1,:asso_2,:asso_3")
end
return @_user_details
end
(我不确定你为什么要把它放在@_user_details
但我把它保留在你的例子中)
您的用户模型应如下所示:
class User < ApplicationRecord
...
after_update { Rails.cache.delete(cache_key) }
def cache_key
"users_#{self.id}"
end
def details
Rails.cache.fetch(cache_key) do
self.profiles.includes(":asso_1,:asso_2,:asso_3")
end
end
end