Angenommen, ich habe eine ActiveRecord-Klasse "Benutzer".Woher weiß ich, dass Rails Activetrecord-Klassenattribute geladen/zwischengespeichert hat?
Ich realisiere das erste Mal, dass ich es benutze über User.new, macht Rails einen Aufruf an die Datenbank, um die tatsächlichen Attribute von Benutzer aus der Tabelle Benutzer zu erhalten. Weitere Male wird es zwischengespeichert und erfordert keinen Datenbankaufruf.
Das ist in Ordnung .. und direkt in einem einzigen Thread.
Angenommen, ich habe mehrere Threads in einem einzigen Prozess ausgeführt. Der erste Thread, der User.new aufruft (oder alles, was den Benutzer betrifft, wie zum Beispiel einen zu finden), sucht die Attribute in der Datenbank. Die nachfolgenden werden sie zwischengespeichert haben.
Gibt es eine Möglichkeit zu überprüfen, ob die ActiveRecord-Attribute im Cache gespeichert sind oder nicht?
Ich möchte nicht immer eine Datenbankverbindung über ActiveRecord :: Base.connection_pool.with_connection auschecken, wenn ich User.new anrufe, wenn ich nicht vorhabe, die Datenbankverbindung zu verwenden - Ja, nicht einmal Speichern Sie es.
u = nil
ActiveRecord::Base.connection_pool.with_connection do # I don't want to checkout a conn if User attributes are cached.
u = User.new
end
#manipulation of u. but u.save NEVER ever gets called.
ich nicht vollständig erklärt meine ganze Argumentation, aber in einem Wort zu beantworten, weil tun würden die Leute so ablenken: es ist kompliziert. Hier ist ein Artikel, wenn interessiert, das ist ähnlich zu meinem Problem: https://bibwild.wordpress.com/2014/07/17/activerecord-concurrency-in-rails4-avoid-leaked-connections/ Ich möchte nicht grundsätzlich eine Datenbankverbindung auschecken, aber immer noch User.new aufrufen, um damit zu manipulieren, aber nicht speichern.