【问题标题】:Controller action is missing templates while using wicked_pdf使用 wicked_pdf 时控制器操作缺少模板
【发布时间】:2017-09-23 12:25:56
【问题描述】:

我正在使用 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' 到 routes.rb 一切正常。

我做错了什么?

【问题讨论】:

    标签: ruby-on-rails templates pdf link-to wicked-pdf


    【解决方案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中指定了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-16
      • 2013-12-22
      相关资源
      最近更新 更多