无法打开CSV文件:没有将StringIO隐式转换为String

hta*_*irt 2 ruby csv ruby-on-rails

我想读取由我的一个控制器导出生成的CSV文件.这是简单的代码:

def export_houses

  houses_file = open("http://127.0.0.1:3000/houses/export.csv")

  houses = CSV.open(houses_file, 'r:bom|utf-8', { headers: true })

  ...

end
Run Code Online (Sandbox Code Playgroud)

问题发生在该CSV.open行,我收到以下错误消息:

TypeError: no implicit conversion of StringIO into String
from /Users/htaidirt/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/csv.rb:1256:in `initialize'
Run Code Online (Sandbox Code Playgroud)

houses_file是正确的找到.这是一StringIO堂课,但我想要一File堂课使用CSV.open.

你知道怎么办吗?谢谢.

Yan*_*ERY 14

您可以从http服务器读取csv文件,如下所示:

require 'open-uri'
require 'csv'
url = 'http://127.0.0.1:3000/houses/export.csv'
houses = CSV.new(open(url), :headers => :first_row)
Run Code Online (Sandbox Code Playgroud)

或者你可以用解析方法解析它

require 'open-uri'
require 'csv'
url = 'http://127.0.0.1:3000/houses/export.csv'
houses = CSV.parse(open(url).read, :headers => true)
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助