Search code examples
ruby-on-railsrubypdfrecurly

How to render a PDF in the browser that is retrieve via rails controller


I have a rails app that uses Recurly. I am attempting to download a PDF and render it in the browser. I currently have a link:

link_to 'Download', get_invoice_path(:number => invoice.invoice_number)

The associated controller has the get_invoice method that looks like so:

def get_invoice
    begin
      @pdf = Recurly::Invoice.find(params[:number], :format => 'pdf')
    rescue Recurly::Resource::NotFound => e
      flash[:error] = 'Invoice not found.'
    end
  end

When I click the link I get the PDF rendered in my console in binary form. How do I make this render the PDF in the browser?


Solution

  • Assuming the PDF is saved in memory, use the send_data to send the data stream back in the browser.

    def get_invoice
      @pdf = Recurly::Invoice.find(params[:number], :format => 'pdf')
      send_data @pdf, filename: "#{params[:number]}.pdf", type: :pdf
    end
    

    If the file is stored somewhere (but this doesn't seem to be your case), use send_file.