我正在交叉引用我的用户'有用户的Facebook好友已注册我的网站。不要问我为什么这样做,但我有一段代码,我想基本上运行一次,然后"缓存"因此,每次页面加载时都不必交叉引用。
if defined? @friends
p "did NOT have to reload"
@friends
else
p "had to reload"
@friends = FbGraph::User.me(current_user.oauth_token).friends
@friends.map! do |friend|
friend if User.find_by_uid(friend.identifier) != nil
end
@friends.compact!
end
假设每次加载friends_list操作时加载。为什么它不断重新加载@friends?
答案 0 :(得分:1)
@friends只是一个实例变量,它被创建然后随着每个请求被销毁。
你最好的办法是像这样缓存响应:
@friends = Rails.cache.fetch("friends-#{current_user.cache_key}") do
friends = FbGraph::User.me(current_user.oauth_token).friends
friends.map! do |friend|
friend if User.find_by_uid(friend.identifier) != nil
end
friends.compact!
end