CSV导入:未定义的方法`path'

时间:2016-03-16 22:58:12

标签: ruby csv ruby-on-rails-4

我正在尝试导入带有地址的CSV。我在控制器上要求'csv'。但是我收到了这个错误:

NoMethodError in AddressesController#import_addresses

undefined method `path' for "testimport.csv":String

 Address.import(params[:file].path)

地址控制器

class AddressesController < ApplicationController

  require 'csv'

  def import_addresses
    Address.import(params[:file].path)
    redirect_to root_url, notice: "Addresses imported."
  end

地址模型

def self.import(file)
    CSV.foreach(file, headers: true) do |row|
        Address.create! row.to_hash
    end
end

参考:http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html

3 个答案:

答案 0 :(得分:1)

请试试这个

form_tag(import_addresses_path, :multipart => true) do 

multipart选项不是url_for选项的一部分。所以你必须明确地将它们分开*

form_tag没有生成正确,字符串被发送到控制器,而不是对象。

答案 1 :(得分:0)

您已将地址模型写成: -

def self.import(file)
    CSV.foreach(file, headers: true) do |row|
        Address.create! row.to_hash
    end
end

我认为如果你改变一下,它应该有效: -

def self.import(file)
        CSV.foreach(file.path, headers: true) do |row|
            Address.create! row.to_hash
        end
    end

希望它有效!

答案 2 :(得分:0)

这是你的代码:

Address.import(   params[:file].path   )

我添加了几个空格......你看到了问题吗?

params[:file]是一个字符串

String类没有path方法

这就是你所看到的错误。

只需删除.path即可使用