簡體   English   中英

導入-CSV到ActiveRecord-Rails中的錯誤處理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM