J'essaie de télécharger un fichier CSV à partir d'un serveur FTP et si l'enregistrement existe, je veux mettre à jour cet enregistrement et ne pas créer un doublon. Pour donner un peu plus de contexte - j'essaie de télécharger un groupe de commandes à partir d'un dossier FTP dans mon application Rails. Il y a un nouveau fichier toutes les heures - parfois les commandes d'une certaine liste contiennent des doublons de la précédente pour éviter de glisser sur les pistes ou à l'occasion la commande a été mise à jour par le client (changement de quantité, changement d'adresse, etc. .) w/la prochaine baisse. Donc, ma question est de savoir si la commande est purement un doublon sans modifications, comment puis-je passer au-dessus de ces commandes et si un enregistrement a été modifié, comment puis-je mettre à jour cet enregistrement?Télécharger un fichier CSV à partir de FTP avec Ruby on Rails et mettre à jour des enregistrements existants
Ruby on Rails 5.1.4 - Ruby 2.4.1
Merci!
Le code ci-dessous est de mon modèle:
class Geek < ApplicationRecord
require 'csv'
def self.download_walmart_orders(out)
out ||= "#{Rails.root}/test_orders.csv"
CSV.foreach(out, :headers => true,
:converters => :all,
:header_converters => lambda { |h| h.downcase.gsub(' ', '_') }
) do |row|
geek = Geek.where(customer_order_id: row.to_h["customer_order_id"],
customer_name: row.to_h["customer_name"],
item_sku: row.to_h["item_sku"],
quantity_to_ship: row.to_h["quantity_to_ship"],
total_items_price: row.to_h["total_items_price"]).first_or_create
puts geek
end
end
fin
sons assez cool. Avez-vous une question? – jvillian
Dans Rails 5, vous voulez utiliser ['find_or_create_by'] (http://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-find_or_create_by). – max
Salut jvillian, je m'excuse pour le phrasé pauvre J'ai juste édité la question en espérant fournir un peu plus de clarté sur ma question. Salut Max - il semble que ça marchera bien pour apporter les données si je n'ai pas de mises à jour. Pour un enregistrement existant Que dois-je utiliser si j'ai effectivement besoin de mettre à jour un enregistrement existant? (La question est reformulée en haut pour donner un meilleur exemple) –