未定义的方法`[]' for nil:在rails中导入csv文件时为NilClass

时间:2015-07-08 14:50:34

标签: csv ruby-on-rails-4 roo-gem

我有一个应用程序,我想提供从CSV和Excel文件格式导入记录的功能。我正在使用roo gem,但在导入它时会出现错误" undefined method` []'为零:NilClass"。

以下是代码:

student.rb:

require 'roo'
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]
    product = find_by_id(row["id"]) || new
    product.attributes = row.to_hash.slice(*accessible_attributes)
    product.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

student_controller.rb:

def import
    Student.import(params[:file])
    redirect_to students_path, notice: "Record imported Successfully."
  end

new.html.erb:

<%= form_tag import_students_path, multipart: true do %>
        <%= file_field_tag :file , :required=> true%> <br/>
        <%= submit_tag "Import" , :class => "btn btn-primary btn-block" %>
<% end %>

告诉我我做错了什么?

0 个答案:

没有答案