首页 文章

使用wicked_pdf时,控制器操作缺少模板

提问于
浏览
0

我正在使用wicked_pdf创建包含数据库内容的pdf .

首先,我创建一个用户并转发到如下所示的页面:

<%= @user.name %>
<%= link_to 'Create PDF', pdf_pages_path(:user_id => @user.id) %>

我的控制器代码:

class PdfPagesController < ApplicationController
  def show
    @user = User.find(params[:user_id])

    respond_to do |format|
      format.html
      format.pdf do
        render pdf: 'file_name'   
      end
    end
  end
end

我的路线档案:

Rails.application.routes.draw do
   root 'landing#index'
   get 'pdf_pages', :to => 'pdf_pages#show'
   get 'users/new'
   resources :users
end

show.pdf.erb:

<h1>Hello World</h1>

当我尝试打开show.pdf.erb时出现此错误:

PdfPagesController#show is missing a template for this request format and variant. request.formats: ["text/html"] request.variant: []

  • 如果我在没有变量传递的情况下使用link_to,我会得到同样的错误 .

  • 如果我从控制器中删除 @user = User.find(params[:user_id]) ,用一个html href属性替换link_to帮助器,并将 get 'pdf_pages/show' 添加到routes.rb一切正常 .

我究竟做错了什么?

1 回答

  • 1

    默认情况下,控制器将所有请求视为HTML . 如果是其他内容,您需要指定您要求的格式:

    <%= link_to 'Create PDF', pdf_pages_path(:user_id => @user.id, format: :pdf) %>
    

    或者,如果您只是要对此操作请求PDF,则可以在路径中指定它:

    get 'pdf_pages', :to => 'pdf_pages#show', format: 'pdf'
    

    然后你不需要在 link_to 中指定它 .

相关问题