我正在尝试导入带有地址的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
答案 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
即可使用