2016-03-31 3 views
0

Ich gehe durch den Ruby-Code von Rails und habe die folgende Methode nicht ganz verstanden.Aktive Record Association - veraltete State-Methode Definition

Die Kommentare Folgendes angeben:

Das Ziel ist abgestanden, wenn das Ziel nicht mehr auf der Platte (n) dass die relevante FOREIGN_KEY (n) sich bezieht. Wenn veraltet, lädt die Assoziation Accessor-Methode des Eigentümers das Ziel erneut. Es ist bis zu Unterklassen, um die stale_state-Methode zu implementieren, falls relevant. Wenn das Ziel nicht geladen wurde, wird es nicht als veraltet betrachtet.

Und hier ist die Definition:

def stale_target? 
    !inversed && loaded? && @stale_state != stale_state 
end 

Der Teil I tat nicht get warum ist es NICHT gleich stale_state?

+0

Vielleicht sein wird, wenn es bereits als abgestanden markiert es keine Notwendigkeit, etwas zu tun ist (?) – MikeJRamsey56

Antwort

2

stale_state würde in einer sub_class für bestimmte Zuordnungen implementiert werden. siehe http://apidock.com/rails/v4.2.1/ActiveRecord/Associations/Association/stale_state

Es heißt es

Diese umgesetzt werden sollten die Werte der entsprechenden Taste (n) zum Besitzer zurückzubringen, so dass, wenn stale_state unterscheidet sich von dem Wert am letzten find_target gespeichert, die Ziel ist abgestanden.

Dies ist nur für bestimmte Assoziationen relevant, deshalb gibt es standardmäßig nil zurück.

Wenn stale_state nicht in einem SUB_CLASS außer Kraft gesetzt worden ist wird es Null zurückkehren und gleich @stale_state die auch null