您好我有一个用户模型
has_many :devices
has_many :events, :through => :devices.
这有以下方法:
def get_events_for_devices limit=nil
events.limit limit
end
然后我有一个用户控制器,我需要为每个用户设备缓存500个事件。目前我正在使用以下电话
user_requested = User.find(params[:id])
profile_info = Rails.cache.fetch("#{user_requested.email}-profile-info") do
{:user => user_requested, :devices => user_requested.devices, :events => user_requested.get_events_for_devices(500)}
我能够从缓存中取回:user和:设备,但不能取回:事件 - 它们似乎不存在。
但是,如果我不使用Rails.cache,我可以获取事件,只需调用user_requested [:events]。
关于我应该如何进行的任何想法? 谢谢!
答案 0 :(得分:3)
fetch如何工作如果您没有给定密钥的关联数据,它将执行该块。由于您确实拥有“#{user_requested.email} -profile-info”键的一些数据,因此不会执行该块。我想如果你想要它重新计算事件数据,如果不存在事件键,你应该为3种不同类型的键提供3个不同的获取块,如下所示:
profile_key = "#{user_requested.email}-profile-info"
user_profile_data = Rails.cache.fetch("#{profile_key}:user") { user_requested }
device_profile_data = Rails.cache.fetch("#{profile_key}:devices") { user_requested.devices }
events_profile_data = Rails.cache.fetch("#{profile_key}:events") { user_requested.get_events_for_devices(500) }