首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用RubyXL将excel文件导入到rails中

使用RubyXL将excel文件导入到rails中
EN

Stack Overflow用户
提问于 2021-02-04 01:48:19
回答 1查看 100关注 0票数 0

我正在尝试建立一个简单的excel导入器使用RubyXL在rails中显示条形码数字。我想做的是导入一个excel文件,并在一个索引页面上显示条形码结果。我遇到了几个错误,我不确定我到底遗漏了什么。这就是我所拥有的:

控制器:

代码语言:javascript
复制
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

型号:

代码语言:javascript
复制
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

查看:

代码语言:javascript
复制
<h2>Import Barcodes</h2>

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

路由:

代码语言:javascript
复制
Rails.application.routes.draw do
  resources :users

  resources :barcodes do
    collection { post :import }
  end

  root to: "pages#root"
end

以下是错误消息:

代码语言:javascript
复制
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"

感谢您的反馈!

EN

回答 1

Stack Overflow用户

发布于 2021-02-04 23:43:52

未定义的局部变量或方法“`params”

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

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

  1. Change 1

将方法从def self.import(file)更改为def self.import(params)

  1. Change 2

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66032932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档