使用RubyXL将excel文件导入rails



我试图在rails中使用RubyXL构建一个简单的excel导入器来显示条形码编号。我要做的是导入excel文件,并在索引页上显示条形码结果。我遇到了一些错误,我不确定我到底错过了什么。我有:

控制器:

class BarcodesController < ApplicationController

def index
@barcodes = Barcode.all
end
def show
@barcode = Barcode.find(params[:id])
end

def  import
Barcode.import(params[:file])
redirect_to @barcode, notice: "Barcode imported"
end
end

模型:

class Barcode < ActiveRecord::Base
def self.import(file)
workbook = RubyXL::Parser.parse(params[:file].path)
worksheets = workbook.worksheets
puts "Found #{worksheets.count} worksheets"
worksheets.each do |worksheet|
puts "Reading: #{worksheet.sheet_name}"
num_rows = 0
worksheet.each do |row|
row_cells = row.cells.map{ |cell| cell.value }
num_rows += 1
end
puts "Read #{num_rows} rows"
end
end
end

视图:

<h2>Import Barcodes</h2>
<%= form_tag import_barcodes_path do %>
<%= file_field_tag :file %>
<%= submit_tag "Import" %>
<% end %>

路线:

Rails.application.routes.draw do
resources :users
resources :barcodes do
collection { post :import }
end
root to: "pages#root"
end

错误信息如下:

NameError in BarcodesController#import
undefined local variable or method `params' for Barcode(Table doesn't exist):Class
Extracted source (around line #4):
2
3
4
5
6
7

def self.import(file)
workbook = RubyXL::Parser.parse(params[:file].path)
worksheets = workbook.worksheets
puts "Found #{worksheets.count} worksheets"

感谢您的任何反馈!

未定义的局部变量或方法' params'

这是因为它正在寻找params局部变量,但它不存在于Barcode.import方法中。

这非常简单。将控制器的params传递给Barcode模型的import方法。

  1. 改变1

def self.import(file)改为def self.import(params)

  1. 改变2

在控制器中,将Barcode.import(params[:file])更改为Barcode.import(params)

最新更新