【发布时间】: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