ruby-on-rails - 使用 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
局部变量,但它在方法中不存在Barcode.import
。
超级简单。params
将控制器传递给模型的import
方法Barcode
。
- 变化 1
将方法从更改def self.import(file)
为def self.import(params)
- 变化 2
在控制器中,更改Barcode.import(params[:file])
为Barcode.import(params)
推荐阅读
- c# - 以命令模式保存系统
- c# - 我如何使用带有延迟的 PictureBox.Visible?
- angular - TS2339:“从不”类型上不存在属性“长度”
- pdf - 用于在自定义对话框中创建和打开/下载 Drive PDF 的 GAS 电子表格脚本
- python - 如何使用 Boto3 按上次修改日期过滤 s3 对象
- c++ - 如何使用 str.begin() 擦除字符串的一部分而不产生错误?
- ios - 如何通过 SwiftUI 按钮在 UIViewController 中执行功能?
- javascript - 如何替换这个组件WillReceiveProps?
- java - 如何在 Java 中播放(MIDI)序列中的音频剪辑?
- asp.net-core - UseStatusCodePagesWithReExecute 对 NotFound 结果执行两次原始请求而没有错误响应