auth_token字段的替换如何在以下场景中起作用

时间:2016-07-14 05:53:00

标签: ruby-on-rails ruby

class User < ActiveRecord::Base
    def facebook
        @facebook ||=  Koala::Facebook::API.new(oauth_token)
    end
end

在rails控制台中

user = User.first 
user.facebook.get_object("me")

第一个问题是,用户模型有一个名为oauth_token的列,虽然我没有明确地传递oauth_token,但在Koala::Facebook::API.new(oauth_token)这里被神奇地取代了,

第二个问题,这里有什么需要缓存@facebook变量?我正在关注这个rails casts教程 https://www.youtube.com/watch?v=JqeZy2G2C1g

1 个答案:

答案 0 :(得分:0)

@First question

取代后你是什么意思? 从我在初始化API(API.new(oauth_token))时看到的,您传递的是分配给特定用户的ouath_token。调用User.first时,您从数据库加载第一个用户,ActiveRecord会自动将oauth_token分配给新创建的实例。如果ouath_token从未保存(因此存在于db记录中),则为nil

@Second question

这通常是出于性能原因而完成的,以避免在同一请求中进行多次API调用。但是,通常来自API调用的响应不是缓存API实例本身。也许Koala API实例直接在构造函数中调用webservice(在其initialize方法中)。

我的注意事项 - 保持facebook调用[{1}}模式中的外部网络服务等方法,以非常困难来更改代码。 最好把它移到这个模型的某个地方。