Я кэширую несколько объектов User, используя Rails.cache.write
, но когда я извлекаю его из кэша и пытаюсь вызвать метод атрибута (идентификатор, имя, адрес электронной почты и т. Д.) Для любого объекта User, который я получаю
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?
Я могу вызвать inspect для объектов User и увидеть все атрибуты. Есть идеи? Спасибо
Я использую стандартную конфигурацию кеша, без изменений. Вот некоторый код:
Я пишу в кеш в моей модели внутри экземпляра метода, который вызывается, когда пользователь входит в систему следующим образом:
cached_friends = self.friends
Rails.cache.write(self.id.to_s+"_friends", cached_friends)
Тогда в моем контроллере у меня есть фильтр before:
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
- это столбец в БД. По существу нет методов экземпляра пользователя, доступных для каждого объекта пользователя. Но я знаю, что объекты есть, потому что я могу вставить raise "#{friends.first.inspect}"
, и все выплевывается, как я и ожидал.