将CSV导入添加到ROR应用程序

我在在线订购应用程序中为批量订单添加了CSV导入。 基本上我要做的是用CSV数据创建一个购物车。

我创建了一个imports_controller:

require 'csv' class ImportsController < ApplicationController def csv_import num_imported = 0 num_failed = 0 CSV.foreach(params[:dump][:file].csv) do |row| c = CsvImport.new( cart_items: row[1], cart_items_quantity: row[2], cart_items_price: row[3], cart_items_description: row[4], cart_items_upc: row[5], cart_items_sku: row[6] ) if c.save num_imported += 1 else num_failed += 1 end end flash.now[:message] = "CSV Import Successful, #{num_imported} new records added to data base. #{num_failed} failed to import." end end 

它在日志中生成以下错误:

 NameError (uninitialized constant ImportsController::CsvImport): app/controllers/imports_controller.rb:11:in `block in csv_import' /usr/local/ruby/lib/ruby/1.9.1/csv.rb:1761:in `each' /usr/local/ruby/lib/ruby/1.9.1/csv.rb:1202:in `block in foreach' /usr/local/ruby/lib/ruby/1.9.1/csv.rb:1340:in `open' /usr/local/ruby/lib/ruby/1.9.1/csv.rb:1201:in `foreach' app/controllers/imports_controller.rb:10:in `csv_import' 

CSV导入表单位于快速订单页面中:

  

Import CSV Order

{:controller=>"imports", :action=>"csv_import"}, :html => { :multipart => true } do |f| -%>

     "my_cart/partials/cart_item", :locals => { :cart_item => item } %>     

Total:


true, :size => "10", :class => "readonly", :style => "color: #C31E22; text-align: right; font-weight: bold;") %>


*my app running really old version of Ruby and Rails (Ruby 1.9 and Rails 3.2)

目前的问题是

  CSV.foreach(File.open params[:dump][:file]) do |row| 

为什么没有设置参数。 我的想法是与forms调用有关

  

任何帮助将不胜感激 – 谢谢!

您的表单正在提交给csv_import操作。 您的控制器定义了一个csv_import=方法。 不确定控制器中还有什么或者csv_import=方法的用途,但是你需要一个可以处理请求的控制器中的csv_import方法。

也许这样的事情:

 def csv_import num_imported = 0 num_failed = 0 CSV.foreach(params[:file].tempfile) do |row| c = CsvImport.new( cart_items: row[1], cart_items_quantity: row[2], cart_items_price: row[3], cart_items_description: row[4], cart_items_upc: row[5], cart_items_sku: row[6] ) if c.save num_imported += 1 else num_failed += 1 end end flash.now[:message] = "CSV Import Successful, #{num_imported} new records added to data base. #{num_failed} failed to import." end