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

Controller action is missing templates while using wicked_pdf

我正在使用 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 缺少此请求格式和变体的模板。 request.formats: ["text/html"] request.variant: []

我做错了什么?

默认情况下,控制器将所有请求视为 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中指定了。