我正在使用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一切正常。
我做错了什么?
答案 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
中指定它。