【问题标题】:Rails 4 - how to make a link to a PDF file (name.PDF)?Rails 4 - 如何链接到 PDF 文件(name.PDF)?
【发布时间】:2014-10-19 13:44:10
【问题描述】:

我正在生成 PDF 文件,我的链接如下所示:

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

当我点击它时,它会将我带到 /display_invoice/123456789(它是一个 HTML 版本)。

在控制器中的动作如下:

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

在路线中:

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

点击链接后,我希望在 URL /display_invoice/INVOICE_NUMBER.pdf - 目前只有 /display_invoice/INVOICE_NUMBER

如何以“.pdf”后缀打开?

谢谢。

【问题讨论】:

  • 尝试将:format =&gt; :pdf 添加到display_invoice_path 助手中,例如display_invoice_path(invoice, :format =&gt; :pdf)

标签: ruby-on-rails ruby pdf wicked-pdf


【解决方案1】:

您需要添加 pdf mime 类型。

将以下行添加到文件config/initializers/mime_types.rb

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

详情请见http://guides.rubyonrails.org/action_controller_overview.html#restful-downloads

编辑:

格式需要是路径助手的一部分:

display_invoice_path(invoice.id, :format => :pdf)

【讨论】:

  • 我已将此添加到上述文件中。顺便说一句,当我手动将 PDF 后缀(如 /display_invoice/INVOICE_NUMBER.pdf)放入 URL 时,会正确生成 PDF 文件,但问题是我不知道如何设置link_to 用于显示 PDF 文件。
  • 我更新了我的答案,你需要在路径助手中包含格式。
  • 为什么我收到警告:已经初始化常量 Mime::PDF 和警告:PDF 的先前定义在这里。它是否已经加载到 Rails 4 > 中?
  • @aldrien.h 如果省略 mime 类型注册会怎样?如果它仍然有效,您可以假设它已经加载到其他地方。这可以是 rails 本身,也可以是 gem,或者代码中的其他地方。
【解决方案2】:

使用此代码代替您的代码

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

【讨论】:

  • 请解释 OP 的代码有什么问题以及为什么可以解决问题。
  • 区别在于 GET 和 POST
【解决方案3】:

有一种不使用哈希火箭的新语法

<%= link_to "Invoice", display_invoice_path(invoide, format: :pdf), target: "_blank" %>

如果您想在锚标记中包含 URL,请使用 .._url 而不是 .._path

<%= link_to "Invoice", display_invoice_url(invoide, format: :pdf), target: "_blank" %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2014-04-22
    相关资源
    最近更新 更多