[英]Importing excel file in rails applications
我正在關注Ryan Bates鐵路廣播教程,以通過鐵路應用程序導入excel文件。 我的Ruby版本是2.2.4,而rails版本是4.2.6我已經安裝了'roo'gem。
我的app \\ models \\ 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
我的app \\ controllers \\ 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
現在,我的應用程序主頁可以正常工作。 但是,當我單擊“導入excel”按鈕(我已經在index.html.erb文件中完成所有操作)之后,從文件選擇器中選擇了文件之后,它顯示以下錯誤:
UsersController#import中的RuntimeError
找不到工作簿,可能傳遞了一個空文件
還不能解決這個問題。 已經定義了open_spreadsheet方法,那么錯誤的原因是什么?
嘗試更改此行:
spreadsheet= open_spreadsheet(file)
至:
spreadsheet= User.open_spreadsheet(file)
編輯:您也丟失並且結束:
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 #<-----------
編輯:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.