Ruby on rails 为什么';方法缺失';ROR中的错误?

Ruby on rails 为什么';方法缺失';ROR中的错误?,ruby-on-rails,Ruby On Rails,尽管这里有其他类似帖子的优秀答案,但我看不到代码中产生此错误的错误:“未定义的方法‘parse_file’for…” 我使用的是RoR(Rails 2.1),我只是尝试使用FasterCSV插件上传和解析csv文件。我还在上传表中保存文件名的记录 非常感谢您的帮助(这让我发疯了……): 我的模型: require 'fastercsv' def new @upload = Upload.new end def self.parse_file(file)

尽管这里有其他类似帖子的优秀答案,但我看不到代码中产生此错误的错误:“未定义的方法‘parse_file’for…” 我使用的是RoR(Rails 2.1),我只是尝试使用FasterCSV插件上传和解析csv文件。我还在上传表中保存文件名的记录

非常感谢您的帮助(这让我发疯了……):

我的模型:

   require 'fastercsv'

  def new

    @upload = Upload.new

  end

  def self.parse_file(file)    

    FasterCSV.foreach(file.path,:headers=>"first_row", :col_sep=>"\t") do |row|
      row.each{|row| puts "row: #{row.inspect}"}
    end

  end
我的控制器:

 def create

    @upload = Upload.new    
    thefile = params[:upload][:upload_file]
    @upload.filename = base_part_of(thefile.original_filename)
    @upload.parse_file(thefile)

    respond_to do |format|
      if @upload.save
        flash[:notice] = 'Upload was successful.'
        format.html { redirect_to(@upload) }
        format.xml  { render :xml => @upload, :status => :created, :location => @upload }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @upload.errors, :status => :unprocessable_entity }
      end
    end

  end


  def base_part_of(file_name)
      File.basename(file_name)
  end
我的看法是:

<% form_for(:upload,
             :url => {:action=> :create},
             :html => { :multipart => true} ) do |form| %>

  Upload your file: <%= form.file_field("upload_file",:size=>50,:class => "csv-input") %><br/>

  <%= submit_tag("Upload") %>

<% end %>

您正在对实例(@Upload)调用类方法(Upload.parse_文件)。或者更改您的定义:

class Upload
  def parse_file(file)
    FasterCSV.foreach(file.path,:headers=>"first_row", :col_sep=>"\t") do |row|
      row.each{|row| puts "row: #{row.inspect}"}
    end
  end
end
或更改您的呼叫:

Upload.parse_file(thefile)

您正在对实例(@Upload)调用类方法(Upload.parse_文件)。或者更改您的定义:

class Upload
  def parse_file(file)
    FasterCSV.foreach(file.path,:headers=>"first_row", :col_sep=>"\t") do |row|
      row.each{|row| puts "row: #{row.inspect}"}
    end
  end
end
或更改您的呼叫:

Upload.parse_file(thefile)