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

时间:2017-09-23 12:25:57

标签: ruby-on-rails templates pdf link-to 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:[]

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

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

我做错了什么?

1 个答案:

答案 0 :(得分: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中指定它。