2013-12-10 10 views
5

Die folgenden Rails-Code Ergebnisse in 6 abfragtaktualisiert mehrere Zeilen mit einer Abfrage in Schienen

people = { 1 => { "name" => "David" }, 2 => { "name" => "Jeremy" }, 3 => { "name" => "Tom" } } 
Person.update(people.keys, people.values) 

Es zwei Abfragen pro aktualisierte Zeile tun. Ein Select und ein Update.

Gibt es eine Möglichkeit, die gleiche Aufgabe in Rails 4 mit nur einer Abfrage (oder nur zwei Abfragen) zu tun?

Es gibt einige Informationen hier auf, wie es in MySQL zu tun, aber nicht Rails: Multiple Updates in MySQL

Dank.

+0

kurze Antwort ist nein. weil jede Transaktion in einer relationalen Datenbank atomar und isoliert sein muss. –

Antwort

5

Nein, aber nicht aus dem Grund @Sam D gab.

Es ist, weil, wenn Sie durch gehen, es ist, weil Sie Validierungen, Rückrufe usw. auf den Objekten ausführen möchten, die aktualisiert werden. Diese Validierungen und Callbacks sind für eine Sammlung von Objekten nicht definiert.

Sie könnten sagen: "Es ist mir egal, ob sie laufen." Und das ist in Ordnung. Aus diesem Grund können Sie mit Rails eine Massenaktualisierung direkt über SQL durchführen.

+0

Kaleidoskop, danke für Ihre Erklärung. Wie Sie erwähnt haben, ist es mir egal, ob Validierungen und Callbacks ausgeführt werden. Haben Sie eine Verbindung/Referenz für Massenaktualisierung durch SQL in Schienen? Vielen Dank. – user2725109

+3

http://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-update_all – Kaleidoscope

Verwandte Themen