Создайте загружаемый файл в рубине на рельсах

Посещение страницы

localhost:3000/download_me

вызывает действие контроллера download_me в контроллере foo.

class foo < ApplicationController
  def download_me
    # a file is created here i.e. temp.csv in directory C:\
  end
end

Контроллер должен создать временный файл csv и после этого запустить загрузку в браузере, который посещает страницу.

Как я могу это сделать?

Ответ 1

Есть ли причина, по которой вы хотите сохранить временный файл на своем сервере? Если этого достаточно, достаточно (используя fastercsv, который вам нужно будет установить):

require 'fastercsv'
FILE_PATH= "root/to/tmpfile.csv"

FasterCSV.open(FILE_PATH, "w") do |csv|
    csv << 'add some data'
end

send_file file_path, :type=>'text/csv'

Я предлагаю вам, вероятно, не хранить файл, но просто замените строку FasterCSV.open на:

csv = FasterCSV.generate do |csv|

Затем выплюнуть csv как ответ:

send_data csv, :type=> 'text/csv'