2016-07-14 3 views
0
class User < ActiveRecord::Base 
    def facebook 
     @facebook ||= Koala::Facebook::API.new(oauth_token) 
    end 
end 

In den Schienen KonsoleWie der Ersatz von auth_token Feld unterhalb Szenario arbeitet in

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

Die erste Frage ist, hat User-Modell eine Spalte namens oauth_token, die auf magische Weise hier in Koala::Facebook::API.new(oauth_token) ersetzt wird immer, auch obwohl ich oauth_token nicht explizit

Zweite Frage, was ist die Notwendigkeit der Zwischenspeicherung @facebook Variable hier? Ich verfolge diese Schienen wirft Tutorial https://www.youtube.com/watch?v=JqeZy2G2C1g

Antwort

0

@first Frage

Was meinen Sie ersetzt zu werden? Von dem, was ich beim Initialisieren von API (API.new(oauth_token)) sehe, übergeben Sie ouath_token, die bestimmten Benutzer zugewiesen ist. Wenn Sie aufrufen, laden Sie den ersten Benutzer aus der Datenbank, und ActiveRecord weist oauth_token automatisch der neu erstellten Instanz zu. Wenn ouath_token niemals gespeichert wurde (also im db-Datensatz vorhanden ist), wäre es nil.

@Second Frage

Diese im Allgemeinen aus Leistungsgründen erfolgt, um mehr API-Aufrufe innerhalb derselben Anfrage zu vermeiden. In der Regel wird die Antwort vom API-Aufruf jedoch nicht von der API-Instanz selbst zwischengespeichert. Vielleicht ruft die Koala-API-Instanz webservice direkt im Konstruktor auf (in der initialize-Methode).

Meine Notiz - solche Methoden wie facebook Aufruf externe Webservice innerhalb User Modells endet mit sehr schwierig zu ändern Code zu halten. Es ist besser, es irgendwo weg von diesem Modell zu bewegen.

Verwandte Themen