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
答案 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}}模式中的外部网络服务等方法,以非常困难来更改代码。
最好把它移到这个模型的某个地方。