【发布时间】:2014-09-21 16:12:50
【问题描述】:
我正在尝试允许用户上传 csv 文件,但是在试图弄清楚如何处理文件本身的错误时遇到了一些问题。
我的控制器方法:
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_date 或order_date 丢失;我得到一个no implicit conversion of nil into String,因为我试图解析一个空单元格的日期。即使我在我的模型中验证了存在,它们也只会在 save 操作时被触发。
我不想用rescue 块默默地忽略这些错误,而是重定向回来,并通知用户。
- 如何处理此类异常,以便作业失败,并且用户会收到错误通知,不仅仅是上面给出的错误,还包括我们无法解释的错误?另一个例子是空行或我们甚至无法解释的东西。我该如何处理此类错误,并通过例如通用的“错误数据”消息通知用户?
- 我应该在我的模型还是控制器中处理这个问题?
【问题讨论】:
标签: ruby-on-rails ruby csv ruby-on-rails-4