我正在使用Rails.cache.write
缓存几个User对象,但是当我从缓存中检索它并尝试在我得到的任何User对象上调用属性方法(id,name,email等)时
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.include?
我可以在User对象上调用inspect,然后看到所有属性。有任何想法吗?感谢
我正在使用标准缓存配置,无需修改。这是一些代码:
我在我的模型中写入一个实例方法中的缓存,当用户登录时会调用该方法:
cached_friends = self.friends
Rails.cache.write(self.id.to_s+"_friends", cached_friends)
然后在我的控制器中我有一个前过滤器:
def get_friends_from_cache
if current_user
friends = Rails.cache.read(current_user.id.to_s+"_friends")
friends.each do |friend|
if !friend.facebook_id.nil?
#other stuff....
end
end
end
end
我在if !friend.facebook_id.nil?
行上收到错误。 facebook_id
是数据库中的一列。基本上,每个User对象都没有可用的User实例方法。但是我知道对象就在那里,因为我可以插入raise "#{friends.first.inspect}"
并且所有东西都像我期望的那样吐出来。
答案 0 :(得分:1)
这在开发模式下发生(即设置config.cache_classes = false)。根本原因:
一种解决方法是使用MemCacheStore另一种方法是设置config.cache_classes = true。另请参阅Comments on railscasts