1

我在这里创建我自己版本的 Rayan Bates CSV 截屏视频......

http://railscasts.com/episodes/396-importing-csv-and-excel

我的模型中有这个...

 def self.open_spreadsheet(file)
    case File.extname(file.original_filename)
    when ".csv" then Csv.new(file.path, nil, :ignore)
    when ".xls" then Excel.new(file.path, nil, :ignore)
    when ".xlsx" then Excelx.new(file.path, nil, :ignore)
    else raise "Unknown file type: #{file.original_filename}"
    end
  end

...并在我的应用程序中收到此错误...

 NameError in StudentsController#import

uninitialized constant Student::Csv

Rails.root: /home/wintas/railsApps/t4
Application Trace | Framework Trace | Full Trace

app/models/student.rb:25:in `open_spreadsheet'
app/models/student.rb:13:in `import'
app/controllers/students_controller.rb:12:in `import'

我找不到“Csv”类的初始化位置,或者它应该来自哪里。任何帮助表示赞赏。

4

4 回答 4

2

我相信自从 Railscast 发布以来,Roo 已经更新到 namespace Csv, Excel, 和namespaceExcelxRoo。试试这个:

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
于 2014-02-27T19:09:16.423 回答
2

使用 roo 1.13.2 的该功能的较新等效项是:

def self.open_spreadsheet(file)
  case File.extname(file.original_filename)
    when ".csv" then Roo::CSV.new(file.path, file_warning: :ignore)
    when ".xls" then Roo::Excel.new(file.path, file_warning: :ignore)
    when ".xlsx" then Roo::Excelx.new(file.path, file_warning: :ignore)
    else raise "Unknown file type: #{file.original_filename}"
  end
end
于 2014-08-07T23:18:06.767 回答
0

在 ruby​​ 标准库中,csv 全部大写:CSV。这有帮助吗?

于 2014-02-27T19:24:43.787 回答
0

尝试重新启动服务器;我之前遇到过问题,重新启动服务器解决了这个问题

于 2015-08-30T10:23:07.667 回答