Frage

In meinem Aktivitätsmodell habe ich einen Standardbereich:

default_scope where(:subject_id => Log.get_subject_id)

Das Problem liegt in Log.get_subject_id, der Standardwert ist 0.Hier ist mein Log-Modell:

@@subject_id = 0
def self.set_subject_id(val)
  @@subject_id = val
end
def self.get_subject_id
  @@subject_id
end

Wenn ich den Wert von @@subject_id über Log.set_subject_id(10) im Controller ändere und dann Activity.all ausprobiere, erhalte ich immer ein schlechtes Ergebnis.SQL:

SELECT "activities".* FROM "activities" WHERE "activities"."subject_id" = 0

Wo liegt ein Problem?Danke!

War es hilfreich?

Lösung

Mit dieser Form von default_scope, dein Log.get_subject_id Der Aufruf wird beim Parsen der Klasse ausgewertet, sodass Sie in Wirklichkeit etwa Folgendes sagen:

default_scope where(:subject_id => 0)

Sie können jedoch einen Block mit verwenden default_scope die Evaluierung des Zielfernrohrs zu verzögern, bis Sie versuchen, es zu verwenden, und vermutlich Log.get_subject_id wird einen nützlichen Wert haben:

default_scope { where(:subject_id => Log.get_subject_id) }

Andere Tipps

Es geschieht aufgrund des Umfangs-Cachings, versuchen Sie es mit Lambda zu wecken: generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top