Ich habe es nicht subtil geschrieben, also habe ich mir eine Notiz gemacht
update_users = []
users.each do |user|
user.name = "John"
user.email = "[email protected]"
update_users << user
end
#Hier weiter_duplicate_key_Übergeben Sie den Spaltennamen, den Sie aktualisieren möchten, an die Aktualisierung
User.import update_users, on_duplicate_key_update: [:name, :email]
Ich verstehe, dass der Standard von Gem darin besteht, den Spaltennamen mit der Option "on_duplicate_key_update" für INSERT anzugeben, und die angegebene Spalte wird aktualisiert (Upsert), wenn der Schlüssel abgedeckt ist.
Wenn Sie also nur den ursprünglichen Benutzer aktualisieren und übergeben, wird dieser nur aktualisiert.
Übrigens scheint die Methode zur Angabe dieser Option je nach Datenbank unterschiedlich zu sein. https://github.com/zdennis/activerecord-import/#duplicate-key-update
# MySQL version
Book.import [book], on_duplicate_key_update: [:title]
# PostgreSQL version
Book.import [book], on_duplicate_key_update: {conflict_target: [:id], columns: [:title]}
Recommended Posts