2017-08-23 4 views
0

条件の集合を取り、その条件を使用してクエリを実行するフォームを設定しようとしています。フォームの下のブラウザウィンドウ(js経由)またはpdf(Prawnを使用)を新しいウィンドウで開きます。Rails 5 - レンダリングフォームの提出結果がjsなどの形式(PDFなど)

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データがありますか? – Pavan

+0

@Pavan Nope。サーバーでは、コントローラアクションをPDFとして処理し、指定された条件でクエリを実行し、「送信データResults_08/23/2017.pdf」を送信しますが、ブラウザは何もしません。 – CChandler81

+0

@ CChandler81これは試しましたか? https://stackoverflow.com/a/7293155/1154044 – cnnr

答えて

0

は、ここで私は(とにかく、今のところ)これが動作するようになった方法は次のとおりです。

AJAXを経由してフォームを送信し、ブラウザで結果を表示し、ユーザーを強制的にフォームからPDFボタンを、削除しました。

は、部分report_resultsにリンクを追加し、PARAM、ステップ1で実行から得られるレコードのIDが戻される。

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

追加されたかどうかを決定するためにコントローラにANの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 

ハッキー?多分。それは動作しますか?うん。

関連する問題