Я пытаюсь настроить форму, которая принимает набор критериев, выполняет запрос с использованием этих критериев и либо отображает результаты в окне браузера под формой (через js), либо в виде pdf (используя Prawn) в новое окно.
index.html.erb (форма):
<%= form_for :criteria, url: results_path, method: :patch, remote: true do |f| %>
...input fields...
<%= button_tag("View", remote: true, value: 'js', name: 'format' %>
<%= button_tag("PDF", remote: true, value: 'pdf', name: 'format', formtarget: '_blank') %>
<div id='report-results'>
</div>
<% end %>
контроллер:
def index
end
def results
@results = ...the query...
respond_to do |format|
format.js
format.pdf do
report = ResultsPdf.new(@results)
send_data report.render, filename: "Results_#{Date.today}.pdf", type: 'application/pdf', disposition: "inline"
end
end
end
результаты.js.erb:
$('div#report-results').empty();
$('div#report-results').html("<%= escape_javascript(render 'report_results') %>");
С этим кодом работает опция «Просмотр» (отображает результаты в браузере), но опция «PDF» ничего не делает. Сервер показывает, что он попадает в контроллер как PDF, выполняет запрос и отправляет данные, но сам PDF не создается. Если я удалю remote: true
из объявления формы, тогда параметры PDF будут работать, но параметр «Просмотр» просто отображает текст results.js.erb в браузере.