Rails,option_for_select用于下载pdf,ajax和send_file()不起作用

时间:2013-08-28 15:00:43

标签: javascript ajax ruby-on-rails-3 pdf

快速背景:想要将pdf发送到客户端进行下载,一些pdf是静态的,有些是我们用pdftk生成的。

所以我在看完这个问题之后一起攻击了这个问题:

Rails 3 - how to send_file in response of a remote form in rails?

HTML

<select id="download_policy_docs_select">
  <%= options_for_select(@file_list) %>
</select>
<input id="download_policy_doc" type="submit" class="btn btn-info btn-180px" value="DOWNLOAD" />

的Ajax

$('#download_policy_doc').click(function(){
    var doc = $('#download_policy_docs_select').val();
    var policy_name = $('h1 :first').html();
    console.log("hello");
    $.ajax({
        type: "POST",
        url: "/policies/ajax_get_policy_document.pdf",
        timeout: 3000,
        success: do_the_success,
        data: {document : doc, policy_name : policy_name}
    });
});

政策控制器:

def policy_declaration(id)
  policy = Policy.find(params[:id] || id)
  return unless enforce_policy_access(policy)

  file_path = PolicyPdf.generate_policy_declaration(policy)

  send_file(file_path, :filename => "#{policy.name}_declaration.pdf", :disposition => 'Content', :type => 'application/pdf')
end

def ajax_get_policy_document
  policy = Policy.find_by_name(params[:policy_name])
  if params[:document] == 'proof_of_insurance'
   redirect_to :action => 'policy_declaration'
  elsif params[:document] == 'master_cert'
    #redirect_to PolicyPdf.get_policy_pdf_filepath(policy)
  elsif params[:document] ==  'im_declaration'
    redirect_to :action => 'policy_declaration'
  elsif params[:document] == 'im_master_cert'
   # redirect_to PolicyPdf.get_policy_pdf_filepath(policy)
  elsif params[:document] == 'invoice'
    redirect_to policy_invoice
  elsif params[:document] == 'legacy_cert'
    redirect_to :action => 'policy_declaration'
  else
    "it's broke!"
  end
end

我的理解是,虽然ajax无法下载文件,但如果我重定向到另一个方法policy_declaration并让它发送文件,并使用正确的:disposition,那么我实际上可以下载一个文件,因为它是从服务器发送的 - 但不是对ajax请求的响应。

所以,我的问题是:

  • 我的理解出了什么问题?
  • 我可以根据需要修改当前的代码吗?
  • 如果我不能做到以上那我该怎么办?

即使答案是'不,你不能这样做使用表格'我仍然想知道我的理解出错了。

如果有人问为什么我试图这样做。我对rails form_helpers不是很了解(这也是许多其他问题所说的)......所以,如果这就是答案,那么在这方面的一些帮助将非常受欢迎。

0 个答案:

没有答案