Ruby on rails 如何保存Rails应用程序创建的响应?
在我的应用程序中有一些对象(如任务、联系人等)的CSV导出。它只是呈现CSV文件,如下所示:Ruby on rails 如何保存Rails应用程序创建的响应?,ruby-on-rails,file,zip,Ruby On Rails,File,Zip,在我的应用程序中有一些对象(如任务、联系人等)的CSV导出。它只是呈现CSV文件,如下所示: respond_to do |format| format.html format.csv { render text: Task.to_csv } # I have self.to_csv def in model end 当我毫无问题地转到“/tasks.CSV”时,它会生成一个CSV文件 现在我想导出所有对象并压缩它们。我正在使用rubyzip gem创建zip文件。现在,我用所有CSV
respond_to do |format|
format.html
format.csv { render text: Task.to_csv } # I have self.to_csv def in model
end
当我毫无问题地转到“/tasks.CSV”时,它会生成一个CSV文件
现在我想导出所有对象并压缩它们。我正在使用rubyzip gem创建zip文件。现在,我用所有CSV创建zip文件的代码如下所示:
Zip::ZipFile.open("#{path_to_file}.zip", Zip::ZipFile::CREATE) do |zipfile|
zipfile.file.open("tasks.csv", "w") { |f| f << open("http://#{request.host}:#{request.port.to_s}/tasks.csv").read }
# the same lines for contacts and other objects
end
Zip::ZipFile.open(“#{path_to_file}.Zip”,Zip::ZipFile::CREATE)do | ZipFile|
zipfile.file.open(“tasks.csv”,“w”){| f | f我做到了!代码是:
Zip::ZipFile.open("#{path_to_file}.zip", Zip::ZipFile::CREATE) do |zipfile|
zipfile.file.open("tasks.csv", "w") do |f|
CSV.open(f, "w") do |csv|
CSV.parse(Task.to_csv) { |row| csv << row }
end
end
end
Zip::ZipFile.open(“#{path_to_file}.Zip”,Zip::ZipFile::CREATE)do | ZipFile|
打开(“tasks.csv”,“w”)do | f |
CSV.open(f,“w”)do | CSV|
CSV.parse(Task.to_CSV){| row | CSVf我发现有问题,但我真的不知道如何修复它。File.open(…)
返回“没有这样的文件”错误。也许我应该使用Net:HTTP
打开该文件,但我也无法使其正常工作。我希望有一种方法可以在没有HTTP响应的情况下获取该文件。似乎Net:HTTP
不起作用,因为我的应用程序中存在用户身份验证。因此,这是找到一种不使用HTTP响应的方法的另一个原因。不要浪费时间不要把你搞糊涂了,CSV不是一个文本文件吗?为什么要使用CSV模块,浪费时间和CPU?你可以像file.open(,“w”){f | f.write(file.open().read)那样复制整个文件
但是,如果您确实想使用CSV,最好使用FasterCSV,它是..呃..更快。关键是它不存在。它是在我获取/tasks.CSV URL时生成的。因此,我不能只打开它并将其内容写入新文件。