Rails 5 - рендеринг результатов отправки формы в формате js или в другом формате (например, PDF)

1

Я пытаюсь настроить форму, которая принимает набор критериев, запускает запрос с использованием этих критериев и либо отображает результаты в окне браузера под формой (через 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

results.js.erb:

$('div#report-results').empty();
$('div#report-results').html("<%= escape_javascript(render 'report_results') %>");

С помощью этого кода функция "Вид" работает (отображает результаты в браузере), но параметр PDF ничего не делает. Сервер показывает, что он нажимает на контроллер как PDF, запускает запрос и отправляет данные, но сам PDF не генерируется. Если я удалю remote: true из объявления формы, то параметры PDF будут работать, но параметр "Вид" просто отображает текст results.js.erb в браузере.

  • 0
    Вы видите данные PDF в браузере?
  • 0
    @Pavan Паван Нету. Я вижу, что на сервере он обрабатывает действие контроллера как PDF, запускает запрос с предоставленными критериями и отправляет затем «Отправленные данные Results_08 / 23 / 2017.pdf», но браузер ничего не делает.
Показать ещё 6 комментариев
Теги:
forms
pdf

1 ответ

0

Вот как я получил это, чтобы работать (пока, во всяком случае):

Удалена кнопка PDF из формы, заставляя пользователя отправлять форму через ajax и просматривать результаты в браузере.

Добавлена ссылка в частичном report_results и переданы идентификаторы записей, полученных в результате выполнения на шаге 1, в качестве параметра:

<%= link_to "PDF", results_path(ids: @results.ids, format: 'pdf'), class: "btn", target: "_blank" %>

Добавлен блок if/else для контроллера, чтобы определить, пришел ли запрос к действию из представления формы или ссылки в формате pdf:

if params[:criteria]  
  @results = ...query based on params[:criteria]...  
elsif params[:ids]  
  @results = ...query based on params[:ids]...  
else  
  ...error handling...  
end

Hackey? Наверное. Это работает? Да уж.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню