【问题标题】:Rails 5 - Rendering form submission results as js or some other format (e.g. PDF)Rails 5 - 将表单提交结果呈现为 js 或其他格式(例如 PDF)
【发布时间】:2018-01-31 16:27:13
【问题描述】:

我正在尝试设置一个表单,该表单接受一组标准,使用这些标准运行查询,并将结果显示在表单下方的浏览器窗口中(通过 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 选项有效,但 View 选项仅在浏览器中呈现 results.js.erb 的文本。

【问题讨论】:

  • 你在浏览器中看到pdf数据了吗?
  • @Pavan 不。在服务器中,我看到它将控制器操作处理为 PDF,使用提供的条件运行查询,然后发送“已发送数据 Results_08/23/2017.pdf”,但浏览器什么也不做。
  • @CChandler81 你试过这个吗? stackoverflow.com/a/7293155/1154044
  • @cnnr 该答案中的第二个示例正是我在上面的 format.pdf 块中所拥有的。
  • @CChandler81,你在表单中添加了remote: true,所以当你提交表单时,它的格式总是js。我建议删除表单并添加两个链接,只有一个js格式和其他 pdf 格式,除非您可以根据 params 更改控制器中的逻辑

标签: javascript ruby-on-rails forms pdf


【解决方案1】:

这是我如何让它工作的(现在,无论如何):

从表单中移除了 PDF 按钮,强制用户通过 ajax 提交表单并在浏览器中查看结果。

report_results 部分中添加了一个链接,并将步骤 1 中运行产生的记录的 ID 作为参数传回:

<%= 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

哈基?大概。它有效吗?是的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    相关资源
    最近更新 更多