重新分配变量,即使它已经被定义了

时间:2014-04-25 08:44:28

标签: ruby-on-rails facebook action

我正在交叉引用我的用户'有用户的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?

1 个答案:

答案 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