ROR导入csv文件没有方法错误 [英] ROR import csv file no method error

查看:125
本文介绍了ROR导入csv文件没有方法错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

错误:

NoMethodError (undefined method `read' for nil:NilClass):
app/controllers/imports_controller.rb:5:in `upload'

我从我之前的问题重做了我的csv上传例程将CSV导入添加到ROR应用程序

I reworked my csv upload routine from my earlier question Adding CSV Import to a ROR application

我发现一个问题,几年前被问到似乎与我想要的相似,但有些代码是在西班牙语 Ruby on Rails - 导入CSV文件

I had found a question that was asked several years ago that seemed similar to what I wanted but some of the code was in Spanish Ruby on Rails - Import CSV file

imported_controller:

imports_controller:

class ImportsController < ApplicationController    

def upload
logger.info "File loaded"
infile = params[:dump][:infile].read
n, errors = 0, []
@archive = []
CSV.parse(infile) do |row|
  n += 1
  # SKIP: header i.e. first row OR blank row
  next if n == 1 or row.join.blank?
  imports = Imports.build_from_csv(row)
  if imports.valid?
    imports.save
    @archive << row
  else
    errors << row
  end
  end
logger.info errors
flash[:success] = "The CSV imported successfully" 

respond_to do |format|
  format.html # index.html.erb
  format.json { render :json => @archive }
    end
 end 
end

似乎有额外的结束,但直到我添加他们我得到一个应用程序错误

*note that there seems to be extra end but until I added them I was getting an application error

models / imports.rb:

models/imports.rb:

class Imports < ActiveRecord::Base

def self.build_from_csv(row)
 #last_level = (row[5].downcase == "yes"
     imports = Imports.new(:imports => "#{row[0]}}",
                            :cart_items => "#{row[1].titlesize}",
                            :cart_items_quantity => "#{row[2].titlesize}",
                            :cart_items_price => "#{row[3].titlesize}",
                            :cart_items_description => "#{row[4].titlesize}",
                            :cart_items_upc => "#{row[5].titlesize}",
                            :cart_items_sku => "#{row[6].titlesize}")
                           # :last_level=> last_level)
return imports
end
end

我用于上传csv的表单调用:

and here is the form call that I use to upload the csv:

<h3>Import CSV Order</h3>                                
                 <% form_for :dump, :url=>{:controller=>"imports", :action=>"upload"}, :html => { :multipart => true } do |f| -%>
                     <table">
                       <tr>
                         <td>
                          <label for="dump_file">
                            Select a CSV File :
                          </label>
                         </td>
                         <td >
                           <%= f.file_field :infile -%>
                         </td>
                       </tr>
                       <tr>
                         <td colspan='2'>
                           <%= submit_tag 'Submit' -%>
                         </td>
                       </tr>
                     </table>

因此,任何关于没有方法的错误的想法将非常感谢你可以告诉我是新的Ruby,这是一个继承的应用程序,所以任何帮助是最受欢迎的
感谢

So any thoughts on the no method error would be much appreciated. As you can tell I am new to Ruby and this was an inherited app so any help is most welcome! thanks

推荐答案

是的,它是 nil 。这不是你期望它是。您的 form_for:dump 语义构造对象dump的表单。它由相应键的 params 中的散列表示。因此,实际上,该参数已经结束:

Yep, it's nil. It's not where you are expecting it to be. Your form_for :dump semantically constructs a form for object "dump". It is represented by a hash in params by the corresponding key. So, actually, that parameter is over there:

params[:dump][:infile]

这篇关于ROR导入csv文件没有方法错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆