0

我对 roo gem 有疑问。当我使用我的 Rails 应用程序上传文件时,它最终会作为文件系统上的 Tempfile,因为我不想保留该文件,而是从中导入电子表格数据。

https://github.com/roo-rb/roo/blob/3ed05e1caef0ce3c5db5c19f1fa14e6f74193079/lib/roo/base.rb#L374

上面的行检查我的对象是否响应搜索。这导致了一个问题。

(byebug) filename_or_stream.class
Tempfile

(byebug) filename_or_stream.methods.include? :seek
true

你建议我如何解决这个问题?

我试图抑制错误

https://github.com/bigos/roo/commit/55ec3325ec3131fa34c3e0f5e647160cb17ef114

并且能够继续我的工作,但问题仍然存在,Tempfile 是如何获得 seek 方法的?

寻找 seek 导致这条线

https://github.com/roo-rb/roo/blob/3ed05e1caef0ce3c5db5c19f1fa14e6f74193079/lib/roo/open_office.rb#L372

这对我来说毫无意义,我仍然不知道如果文档没有说明任何内容,Tempfile 为什么会响应寻求。

说明问题的应用程序

https://github.com/bigos/open_example/blob/master/spec/models/open_sheet_spec.rb

可能的简单解决方案

if file.is_a? Tempfile
  @workbook = Roo::OpenOffice.new(file.path)
else
  @workbook = Roo::OpenOffice.new(file)
end

但是为什么这只是 roo gem 的 Opensheet 部分的问题呢?我没有注意到其他电子表格中的问题。

4

0 回答 0