2016-06-09 4 views
0

Я следую руководству Ryan Bates по трансляции ретрансляции для импорта файла excel через рельсовое приложение. Моя версия Ruby - 2.2.4, а версия рельсов - 4.2.6. Я уже установил gem.Импорт файла excel в приложениях для рельсов

Мои приложения \ модели \ user.rb файл:

class User < ActiveRecord::Base 
require 'csv' 

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] 
    user=find_by_id(row["id"])||new 
    user.attributes=row.to_hash.slice(*accessible_attributes) 
    user.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) 
    #when ".xlsx" then Excelx.new (file.path, nil, :ignore) 
    else raise "Unknown file type: #{file.original_filename}" 
    end 
end 

end 

Мои приложения \ Контроллеры \ users_controller.rb Файл:

class UsersController < ApplicationController 
def index 
    @users=User.all 
end 
def import 
    User.import(params[:file]) 
    redirect_to root_url, notice: "Activity data imported!" 
end 
end 

Теперь моя домашняя страница приложение работает должным образом. Но после того, как selectiong файла из файлового броузера, когда я нажав на кнопке «импорт Excel» (я сделал все это в index.html.erb файла) ,, то он показывает следующее сообщение об ошибке:

RuntimeError in UsersController#import

could not locate a workbook, possibly an empty file passed

Пока не удается решить эту проблему. Метод open_spreadsheet уже определен там, то в чем причина ошибки?

ответ

1

Попробуйте изменить эту строку:

spreadsheet= open_spreadsheet(file) 

к:

spreadsheet= User.open_spreadsheet(file) 

EDIT: Вы также отсутствует и конец:

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] 
    user=find_by_id(row["id"])||new 
    user.attributes=row.to_hash.slice(*accessible_attributes) 
    user.save 
end 
end #<----------- 

EDIT:

class User < ActiveRecord::Base 
require 'csv' 

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] 
    user=find_by_id(row["id"])||new 
    user.attributes=row.to_hash.slice(*accessible_attributes) 
    user.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) 
    #when ".xlsx" then Excelx.new (file.path, nil, :ignore) 
    else raise "Unknown file type: #{file.original_filename}" 
    end 
end 

end 
+0

по-прежнему та же ошибка ,,, ничего не было – Abhradip

+0

Вы отсутствуете и «заканчиваете» после первого цикла – ryudice

+0

теперь он поставляется с SyntaxError в UsersController # import – Abhradip