Rails: Как создать файл из контроллера и сохранить его на сервере? - PullRequest
3 голосов
/ 28 сентября 2011

По какой-то странной причине мне нужно сохранить файл (обычно загружаемый напрямую) на сервере.В моем случае у меня есть PDF-файл, созданный с помощью PDFKit, который мне нужно сохранить.

# app/controllers/reports_controller.rb
def show
  @report = Report.find(params[:id])

  respond_to do |format|
    format.pdf { render :text => PDFKit.new(report_url(@report)).to_pdf }
  end
end

Если я захожу в reports / 1.pdf, я получаю ожидаемый отчет, но хочу сохранить его вserver.

Существует ли Raily способ сохранить файл на сервере из ответа на?

1 Ответ

2 голосов
/ 29 сентября 2011

Просто короткое замечание, прежде чем я получу фактический ответ: похоже, вы передаете полный URL (report_url(@report)) на PDFKit.new, что является пустой тратой - это означает, что PDFKit должен сделать запрос к веб-серверу, который, в свою очередь, должен пройти через маршрутизатор Rails и т. д. вниз по линии, чтобы получить содержимое страницы. Вместо этого вы должны просто отобразить страницу в вашем контроллере с помощью render_to_string и передать ее PDFKit.new, так как она будет принимать строку HTML. Помня об этом ...

Это описано в разделе «Использование» README PDFKit . Вы бы сделали что-то вроде этого:

def show
  @report = Report.find(params[:id])

  kit       = PDFKit.new render_to_string(@report) # pass any options that the
  pdf_file  = kit.to_file '/some/file/path.pdf'    # renderer needs here (same
                                                   # options as `render`).
  # and if you still want to send it to the browser...
  respond_to do |format|
    format.pdf { render :file => pdf_file.path }
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...