2017-09-23 3 views
0

J'utilise wicked_pdf pour créer un pdf avec le contenu de la base de données.L'action du contrôleur est manquant modèles en utilisant wicked_pdf

Tout d'abord, je crée un utilisateur et transmettre à une page qui ressemble à ceci:

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

Mon code de commande:

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 

Mon fichier d'itinéraire:

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

spectacle. pdf.erb:

<h1>Hello World</h1> 

Lorsque je tente d'ouvrir show.pdf.erb je reçois cette erreur:

PdfPagesController # show manque un modèle pour ce format de demande et variante. request.formats: [ "text/html"] request.variant: []

  • Si je link_to sans passer la variable que je reçois la même erreur.

  • Si je supprime @user = User.find (params [: user_id]) du contrôleur, remplacez l'aide link_to avec un attribut HTML href et ajouter get 'pdf_pages/show' à routes.rb Tout fonctionne bien.

Qu'est-ce que je fais mal?

Répondre

1

Par défaut, les contrôleurs considèrent toutes les demandes comme HTML. Vous devez spécifier le format que vous vous demandez si c'est quelque chose d'autre:

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

Sinon, si vous ne va jamais demander PDF sur cette action, vous pouvez le spécifier dans la route:

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

Ensuite, vous n'avez pas besoin de le spécifier dans link_to.