Rails 4 - how to make a link to a PDF file (na

2019-04-28 21:24发布

I am generating PDF files and my link look like this:

<%= link_to 'Invoice', display_invoice_path(invoice.id), :format => :pdf %>

When I click on this, it takes me to /display_invoice/123456789 (it's an HTML version).

In the controller action is following:

def display_invoice
    if params[:invoice_number]
      @invoice = ...

      respond_to do |format|
        format.html
        format.pdf do
          #render pdf: '123',                  # file name
          render pdf: params[:invoice_number],
                 layout: 'layouts/application.pdf.erb'#,  # layout used
                 #show_as_html: params[:debug].present?    # allow debuging
        end
      end
    end
  end

and in the routes:

  get '/display_invoice/:invoice_number', to: 'invoices#display_invoice', :as => 'display_invoice'

After clicking the link, I'd like to have in the URL /display_invoice/INVOICE_NUMBER.pdf - currently, there's just /display_invoice/INVOICE_NUMBER.

How to open it with the ".pdf" suffix?

Thank you.

2条回答
老娘就宠你
2楼-- · 2019-04-28 21:40

use this code instead of your code

<%= link_to 'Invoice', display_invoice_path(invoice.id, :format => :pdf) %>
查看更多
干净又极端
3楼-- · 2019-04-28 21:59

You need to add the pdf mime type.

Add the following line to the file config/initializers/mime_types.rb:

Mime::Type.register "application/pdf", :pdf

See http://guides.rubyonrails.org/action_controller_overview.html#restful-downloads for details.

EDIT:

The format needs to be part of the path helper:

display_invoice_path(invoice.id, :format => :pdf)
查看更多
登录 后发表回答