2016-03-31 21 views
0

私のレールアプリはアイテムの状態を変更しますが、そうすると、ユーザが遭遇する可能性のあるエラーが発生する可能性があります。私は、ユーザーがそれらのエラーを無効にする方法を開発しており、その後、彼らは彼らが何をしたの領収書としてそれを印刷することができるようにPDFレポートを作成します。ここでRailsアプリケーションのアップデートでPrawn PDFレポートを作成する前に

は、レポートを開発し、各項目のアクションを完了したコードです:

def report 
    ids = params[:ids].split() 
    @items = Item.order("id").where(id: ids) 

    respond_to do |format| 
    format.html 
    format.pdf { prawnto(page_size: "A4", inline: true)} 
    end 

    @items.each do |item| 
    item.action 
    end 
end 

私の問題は、順番にエラー(項目のインスタンスのために、互換性のない状態)をテストするために、ということですが、私はの項目をテストする必要があります。のアクションが有効になります。

これまでに行ったすべてのテストは、レポートが完了する前にitems.each doブロックが評価されていることを示しています。私のアプリは逆を必要とします。

この現象がなぜ発生しているかについての助けおよび/または説明は非常に高く評価されます。

答えて

1

レンダリングを行う前にコントローラコードが完了して実行されます。あなたがpdfフォーマットで与えたそのブロックは最後まで無視されるので、ここでは何もしません。あなたが定義した場所のためにすぐに実行されるという義務はありません。

あなたが本当にその後、レンダリング方法でそれを使用して、レポートの結果をキャプチャし、それが最初に行わ必要がある場合:

# Execute the report immediately. 
report_pdf = prawnto(...) 

respond_to do |format| 
    format.pdf { report_pdf } 
end 
関連する問題