1

簡単な背景: ダウンロードのためにクライアントに pdf を送信したいのですが、一部の pdf は静的であり、一部は pdftk で生成されます。

だから私はこの質問を見た後、これを一緒にハックしました:

Rails 3 - Railsのリモートフォームに応答してsend_fileを送信する方法は?

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" />

アヤックス

$('#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 リクエストへのレスポンスとして。

だから、私の質問は次のとおりです。

  • 私の理解はどこで間違っていましたか?
  • 希望どおりに動作するように現在のコードを修正できますか?
  • 上記のことができない場合、どうすればよいですか?

答えが「いいえ、フォームを使用してこれを行うことはできません」であっても、私の理解がどこで間違っていたのかを知りたいです。

また、なぜ私がこのようにしようとしたのか誰かが尋ねた場合に備えて。私はレールがあまり得意ではありませんform_helpers(これは他の多くの質問が行うと言われていることです)...それが答えである場合、その方向への助けをいただければ幸いです。

4

0 に答える 0