Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何保存Rails应用程序创建的响应?_Ruby On Rails_File_Zip - Fatal编程技术网

Ruby on rails 如何保存Rails应用程序创建的响应?

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

在我的应用程序中有一些对象(如任务、联系人等)的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创建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 | CSV
f我发现有问题,但我真的不知道如何修复它。
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时生成的。因此,我不能只打开它并将其内容写入新文件。