Je ne l'ai pas écrit subtilement, alors je me suis fait une note
update_users = []
users.each do |user|
user.name = "John"
user.email = "[email protected]"
update_users << user
end
#Ici sur_duplicate_key_Transmettez le nom de la colonne que vous souhaitez mettre à jour pour mettre à jour
User.import update_users, on_duplicate_key_update: [:name, :email]
Je comprends que la valeur par défaut de Gem est de spécifier le nom de la colonne avec l'option ʻon_duplicate_key_update` pour INSERT, et la colonne spécifiée sera mise à jour (Upsert) lorsque la clé est couverte.
Donc, si vous mettez à jour uniquement l'utilisateur d'origine et que vous le transmettez, il ne sera mis à jour que.
À propos, il semble que la méthode de spécification de cette option diffère selon la base de données. 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