使用Roo导入Excel文件,错误:不推荐将`packed`或`file_warning`作为单独的参数提供给`Roo :: Excel.new`

导入代码:

def self.import(file) spreadsheet = open_spreadsheet(file) header = spreadsheet.row(1) (2..spreadsheet.last_row).each do |i| row = Hash[[header, spreadsheet.row(i)].transpose] region = find_by_id(row["id"]) || new region.attributes = row.to_hash.slice(*row.to_hash.keys) region.save! end end def self.open_spreadsheet(file) case File.extname(file.original_filename) when ".csv" then Roo::Csv.new(file.path, nil, :ignore) when ".xls" then Roo::Excel.new(file.path, nil, :ignore) when ".xlsx" then Roo::Excelx.new(file.path, nil, :ignore) else raise "Unknown file type: #{file.original_filename}" end end 

错误:

 Supplying `packed` or `file_warning` as separate arguments to `Roo::Excel.new` is deprecated. Use an options hash instead. 

我知道我需要通过一个options = {}地方,但我不知道在哪里。 我GOOGLE了一下,看了一些示例代码,但他们是完全不同的用途。

谢谢你的帮助!

尝试改变:

 when ".csv" then Roo::Csv.new(file.path, nil, :ignore) when ".xls" then Roo::Excel.new(file.path, nil, :ignore) when ".xlsx" then Roo::Excelx.new(file.path, nil, :ignore) 

 when ".csv" then Roo::Csv.new(file.path, packed: nil, file_warning: :ignore) when ".xls" then Roo::Excel.new(file.path, packed: nil, file_warning: :ignore) when ".xlsx" then Roo::Excelx.new(file.path, packed: nil, file_warning: :ignore) 

看起来像你目前是Roo ::方法调用的旧版本。

当前版本的roo的初始化方法需要一个文件名和一个选项参数。 设置file.path, packed: nil, file_warning: :ignore因为参数将使用第一个参数作为文件名,其余参数作为选项的散列值。