[英]Import - csv to activerecord - error handling in Rails
我正在編寫一個導入例程,該例程將允許用戶上傳CSV文件以加載其數據庫。 CSV的每一行都對應一個模型 。
我正在使用FasterCSV讀取文件並將數據拆分為單獨的模型,效果很好。 我只是在確定處理錯誤的最佳方法方面遇到困難。
現在我有這個打算,但是對我來說確實很不對勁:
def import(collection)
begin
self.transaction do
collection.collect{|object| object.save!}
end
rescue ActiveRecord::RecordInvalid => invalid
return false
end
return true
end
有沒有更好的方法來保存模型集合?
當您要查找有問題的記錄時,在循環中使用異常會為您帶來各種麻煩。 您可能會嘗試保存所有內容,但要報告有錯誤的內容:
def import(collection)
failed = nil
transaction do
failed = collection.reject { |r| r.save }
unless (failed.empty?)
raise ActiveRecord::Rollback
end
end
failed
end
假設您有興趣查看這些錯誤。 如果任何記錄失敗,它們將以數組形式返回。 否則,您將得到nil,這意味着沒有錯誤。
如果您不在乎,可以隨時進行快速而骯臟的保存:
def import(collection)
transaction do
collection.each(&:save!)
end
end
對於第一次失敗,這將彈出一個ActiveRecord :: RecordInvalid異常。
對於這個問題,我認為更好的方法是您的方法。 也許不是csvaré中的所有記錄都有效,而那些沒關系的記錄(記錄它們以了解錯誤)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.