我使用cloud9 ide在轨道上使用红宝石!
我正在测试gem'roo',以将excel文件导入数据库。在我做之前,我想测试一下这个宝石作品。
宝石文档:https : //github.com/roo-rb/roo
但带文件有问题!
错误消息是这样的
MersmapController#index中的IOError
文件../assets/test.xlsx不存在
这是我的代码!
require 'roo'
class MersmapController < ApplicationController
def index
xlsx = Roo::Excelx.new("../assets/test.xlsx")
@show = xlsx.info
end
end
Run Code Online (Sandbox Code Playgroud)
并在index.erb中
<h1> <%= @show %> </h1>
Run Code Online (Sandbox Code Playgroud)
我使用“ images.jpg”(图像文件)测试此路径
当我在index.erb中写入图像文件的路径时,它肯定可以正常工作!
我试过了
xlsx = Roo::Excelx.new("../assets/excel/test.xlsx")
xlsx = Roo::Excelx.new("../../app/assets/test.xlsx")
xlsx = Roo::Excelx.new("../../app/assets/excel/test.xlsx")
Run Code Online (Sandbox Code Playgroud)
...... 所有的事情!!
但是最后我不知道是什么问题...如果您能帮助我,我将不胜感激!
我有一个具有:image
属性的产品模型。它使用载波进行图像上传:
mount_uploader :image, ImageUploader
这适用于我的新建/编辑表单,但由于我有一个使用roo
gem 进行 excel 上传的批量上传选项,mount_uploader 不允许image
填充该列。每当它是 excel 批量上传时,我都需要禁用/卸载上传器。以下是我的 excel 上传的执行方式:
def self.import(file)
spreadsheet = Roo::Spreadsheet.open(file.path)
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
product.save!
end
end
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Roo将Excel电子表格中的数据导入Rails应用程序中的表(data_points).
我收到错误:
undefined method `fetch_value' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
并且该错误在行引用了我的data_point.rb文件(参见下面的完整代码摘录):
data_point.save!
Run Code Online (Sandbox Code Playgroud)
"应用程序跟踪"说:
app/models/data_point.rb:29:in `block in import'
app/models/data_point.rb:19:in `import'
app/controllers/data_points_controller.rb:65:in `import'
Run Code Online (Sandbox Code Playgroud)
我很困惑,因为我的整个应用程序中的"查找所有"都没有显示fetch_value的实例
这是我的应用程序中的其他代码:
在我的模型中,data_point.rb:
class DataPoint < ActiveRecord::Base
attr_accessor :annual_income, :income_percentile, :years_education
def initialize(annual_income, income_percentile, years_education)
@annual_income = annual_income
@income_percentile = income_percentile
@years_education = years_education
end
def self.import(file)
spreadsheet = open_spreadsheet(file)
header = spreadsheet.row(1)
(2..11).each do |i|
annual_income = spreadsheet.cell(i, 'A')
income_percentile = spreadsheet.cell(i, 'B')
years_education = spreadsheet.cell(i, 'C')
data_point = DataPoint.new(annual_income, income_percentile, years_education)
data_point.save!
end
end
def self.open_spreadsheet(file)
case File.extname(file.original_filename)
when ".xlsx" …
Run Code Online (Sandbox Code Playgroud)