在 Rails 中导入 Excel 文件 - 未初始化的 Constant Hospital::Excel
Posted
技术标签:
【中文标题】在 Rails 中导入 Excel 文件 - 未初始化的 Constant Hospital::Excel【英文标题】:Importing Excel Files in Rails - Uninitialized Constant Hospital::Excel 【发布时间】:2013-08-31 19:57:29 【问题描述】:这是我的应用程序跟踪(不确定标准是否像代码一样缩进):
app/models/hospital.rb:21:in `open_spreadsheet'
app/models/hospital.rb:10:in `import'
app/controllers/hospitals_controller.rb:7:in `import'
我正在关注 Railscast 第 396 集的大纲
我的代码基本相同,但出现此错误。我认为宝石“roo”已经改变。无论如何我会在下面发布一些代码
models/hospital.rb
class Hospital < ActiveRecord::Base
has_one :ctscan
has_one :mri
has_one :hipreplacement
has_one :kneereplacement
has_one :kneearthroscopy
has_one :shouldersurgery
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]]
hospital = find_by_id(row["id"]) || new
hospital.attributes = row.to_has.slice(:id, :name, :address)
hospital.save!
end
end
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
end
hospitals_controller.rb
class HospitalsController < ApplicationController
def index
@search = Hospital.search(params[:q])
@hospitals=@search.result
end
def import
Hospital.import(params[:file])
redirect_to root_url, notice: "Products Imported"
end
end
config/application.rb(*注意我两个都需要,因为我不知道我应该在哪里指定它)
require File.expand_path('../boot', __FILE__)
require 'rails/all'
require 'rubygems'
require 'roo'
require 'csv'
require 'iconv'
Roo::Excel.new
Bundler.require(:default, Rails.env)
module MedicalChoice
class Application < Rails::Application
require 'rails/all'
Roo::Excel.new
require 'rubygems'
require 'roo'
require 'csv'
require 'iconv'
end
end
【问题讨论】:
我的 config/application.rb 文件到处都是。我不确定是否需要 Roo::Excel.new 行,我也希望能得到一些帮助 能否将错误的堆栈跟踪也添加到帖子中? 【参考方案1】:你尝试改变了吗
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
到:
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
我想我也曾经遇到过这个问题。并以这个解决方案结束了这个案例。
【讨论】:
@Suraj 您使用的是哪个版本的Roo
?
这是我的一些错误,经过一些调整后它工作了
Suraj,请说说这些调整
你可以使用when ".xlsx" then Roo::Excelx.new(file.path)
以上是关于在 Rails 中导入 Excel 文件 - 未初始化的 Constant Hospital::Excel的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Databricks pyspark 中导入 Excel 文件
如何在 Pandas Dataframe 中导入多个 excel 文件
在 laravel 5.8 中导入 excel 文件后无法管理文件数据