gpt4 book ai didi

ruby-on-rails - Rails 解析带有空单元格的 CSV 并正确处理异常

转载 作者:太空宇宙 更新时间:2023-11-03 16:49:47 24 4
gpt4 key购买 nike

我试图让用户上传 csv 文件,但是我在尝试弄清楚如何处理文件本身的错误时遇到了一些问题。

我的 Controller 方法:

def create
Product.import_csv(file)
redirect_to products_path, :flash => { :notice => "Items Added!" }
end

我导入文件的模型方法:

def self.import_csv(file)
csv = CSV.read(file.path), :headers => true)
csv.each do |row|
item_id = row[0]
start_date = Date.parse(row[1])
order_date = Date.parse(row[2])
new_rec = where(item_id:item_id, order_date:order_date).first_or_initialize
new_rec.save!
end
end

当文件格式正确时,所有这些都运行良好,但是我对如何处理异常感到困惑。一旦这样的异常是当 start_dateorder_date 丢失时;我得到一个 no implicit conversion of nil into String 因为我试图解析一个空单元格的日期。尽管我在我的模型中进行了存在验证,但它们只会在 save 操作时被触发。

我不想用 rescue block 默默地忽略这些错误,而是重定向回来并通知用户。

  1. 我如何处理此类异常,以便作业失败,并通知用户错误,不仅仅是上面给出的错误,还包括我们无法解释的错误?另一个例子是空行或我们甚至无法解释的东西。我如何处理此类错误,并通过例如通用的“错误数据”消息通知用户?
  2. 我应该在我的模型中还是在我的 Controller 中处理这个问题?

最佳答案

如果您有日期的存在验证,您可以仅在它们存在时简单地分配它们,然后让您的模型完成其余的工作:

def self.import_csv(file)
csv = CSV.read(file.path), :headers => true)
csv.each do |row|
item_id = row[0]
start_date = row[1].nil? ? nil : Date.parse(row[1])
order_date = row[2].nil? ? nil : Date.parse(row[2])
new_rec = where(item_id:item_id, order_date:order_date).first_or_initialize
new_rec.save!
end
end

关于ruby-on-rails - Rails 解析带有空单元格的 CSV 并正确处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25029718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com