rails 3 :mit find()
Ich ein Modell haben Nutzer die has_many :die Nachrichten und die Nachricht, die belong_to :Benutzer.
wenn ich Nachricht.suchen(1, :include => :Benutzer) es nicht zurück mich user, aber wenn ich Nachricht.finden(1).to_json(:include => :Benutzer), es ist auch das user-Objekt in die hash.
Wie bekomme ich es in Nachricht.suchen(1, :include => :Benutzer) ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein Fall von eager/lazy loading. Wenn Sie das tun:
Sind Sie eifrig laden Sie die Benutzer, weil, wenn Sie anrufen
@message.user
Sie nicht machen eine weitere Abfrage zum abrufen der Benutzer, während das tun:Finden Sie die Mitteilung und Aufruf
@message.user
wird eine weitere SQL-Abfrage(aka lazy loading).Wenn Sie einen Blick auf die eigentlichen SQL-Abfragen immer an den server gesendet werden, werden Sie sehen, dass Sie infact abrufen der Benutzer im ersten Beispiel.
Der Grund, warum es nicht angezeigt ist, weil Sie wenn Sie untersuchen
@message
es zeigt nur die Meldung, im Gegensatz zu aufrufen vonto_json
, die Kräfte der Inspektion vonuser
.Ist es enthalten, so dass, wenn Sie nennen dies:
Zweite Abfrage nicht ausgeführt werden, da Benutzer bereits geladen, während
wird ausgeführt, die beiden Abfragen
Und nützlichen screencast zu verstehen, was Los ist
Diese syntax ist in der Lage mit rails 4.
Es ist in der SQL-Abfrage. Wenn Sie anrufen
Message.find(1, :include => :user).user
keine Abfrage ausgeführt, für, die. Alle Daten werden in einer SQL-Abfrage.Uhr Anwendungsprotokoll für Beweise (
tail -f log/development.log
).