我对 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 导致这条线
这对我来说毫无意义,我仍然不知道如果文档没有说明任何内容,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 部分的问题呢?我没有注意到其他电子表格中的问题。