ich einen JSON-String mit einer Ebene der Verbände produzieren will:to_json: include auf aktive Datensatz erfordert Datenbank
@lines = Line.joins(:mems)\
.where(" lines.document_id = ?
AND lines.text <> 'root'
AND mems.review_after < ?", params[:id], Time.now())\
.to_json :include => :mems
Mein Entwicklungsprotokoll wird wie folgt dar:
Line Load (0.4ms) SELECT `lines`.* FROM `lines` INNER JOIN `mems` ON `mems`.`line_id` = `lines`.`id` WHERE (lines.document_id = '30'
AND lines.text <> 'root'
AND mems.review_after < '2011-01-10 04:14:59')
Mem Load (0.2ms) SELECT `mems`.* FROM `mems` WHERE (`mems`.line_id = 49)
Mem Load (0.3ms) SELECT `mems`.* FROM `mems` WHERE (`mems`.line_id = 50)
Mem Load (0.2ms) SELECT `mems`.* FROM `mems` WHERE (`mems`.line_id = 51)
Mem Load (0.3ms) SELECT `mems`.* FROM `mems` WHERE (`mems`.line_id = 52)
Tag Load (0.1ms) SELECT `tags`.* FROM `tags` WHERE (`tags`.`id` = 8) LIMIT 1
Rendered documents/review.erb within layouts/application (11.3ms)
Wie Sie sehen können, Das ActiveRecord-Objekt erzeugt eine einzelne Abfrage mit einem inneren Join. Die to_json-Methode fragt jedoch das zugeordnete Modell für jeden Leitungsdatensatz einzeln ab.
Gibt es eine Möglichkeit, diese doppelten Abfragen zu vermeiden, ohne eine benutzerdefinierte Serialisierungsmethode zu schreiben?
Wie verwende ich to_json auf meiner ursprünglichen Abfrage? – joshs
danke für den Hinweis. das hat funktioniert: @lines = Line.includes (: mems) ... – joshs
heh tut mir leid - die to_json Methode nimmt auch noch das Original arg:: include =>: mems – joshs