Kann jemand herausfinden, ob eine Rails-Verbindung geladen wurde?Wie ermittelt man, ob die Rails-Assoziation geladen ist?
Meine Situation: Ich habe eine Ergebnismenge, wo manchmal eine der Vereinigungen eifrig geladen ist, und manchmal ist es nicht. Wenn es nicht eifrig geladen ist, dann möchte ich nach Verknüpfungen suchen, die den Fund von ActiveRecord verwenden. Wenn es eifrig geladen ist, möchte ich erkennen.
Zum Beispiel, sagen, dass ich eine „has_many“ Array von shipping_info Objekten in meinem Artikel Modell. Dann:
Wenn Artikel eifrig geladen ist, effizienteste Last ist:
item.shipping_infos.detect { |si| si.region == "United States" }
Wenn Artikel nicht eifrig geladen ist, effizienteste Last:
item.shipping_infos.where(region: "United States").first
Aber es sei denn, ich weiß, ob es ist eifrig geladen, ich weiß nicht, welchen Code zu rufen, um den Datensatz effizient zu bekommen. Wenn ich die erste Methode verwende, wenn sie nicht eifrig geladen wurde, dann muss ich mehr DB-Datensätze nachsehen als nötig. Und wenn ich die zweite Methode benutze, wenn sie geladen wurde, dann werden meine eifrig geladenen Objekte ignoriert.
Danke Bryan. Ich verstehe, woher du kommst. Dieser spezielle Code wird in unserer gesamten App am häufigsten als partiell bezeichnet, so dass das Abmellen selbst in Mikrosekunden einen messbaren Unterschied macht. Ich gebe #loaded? ein Versuch. – wbharding
Dies funktioniert nur für has_many-Zuordnungen! Im Falle von orders_to wird dieser Aufruf tatsächlich das andere Objekt laden (so wird es immer wahr) – reto