2012-03-14 11 views
7

sto cercando di utilizzare rails 3.2 aiutanti all'interno di una classe prawn, ma rotaie tiri:Rails/Prawn: come utilizzo gli helper dei binari all'interno di una classe Prawn?

undefined method `number_with_precision' for #<QuotePdf:0x83d4188> 

Prawn Classe

class QuotePdf < Prawn::Document 
    def initialize(quote) 
    super() 

    text "sum: #{number_with_precision(quote.sum)}" 
    end 
end 

controller

def show 
    @quote = current_user.company.quotes.where(:id => params[:id]).first 
    head :unauthorized and return unless @quote 

    respond_with @quote, :layout => !params[:_pjax] do |format| 
    format.pdf do 
     send_data QuotePdf.new(@quote).render, filename: "Devis-#{@quote.date_emission.strftime("%d/%m/%Y")}.pdf", 
     type: "application/pdf" 
    end 
    end 
end 

Grazie per il tuo aiuto.

risposta

11

Devi includere esplicitamente ActionView::Helpers::NumberHelper (o qualsiasi altra classe/modulo helper) nella classe del tuo documento di gamberi.

class QuotePdf < Prawn::Document 
    include ActionView::Helpers::NumberHelper # <- 

    def initialize(quote) 
    super() 

    text "sum: #{number_with_precision(quote.sum)}" 
    end 
end 
+0

funzionato bene per me in Rails 3.2.11. Quello di Siekfried no. Grazie! –

+0

include deve essere al di fuori della classe (prima della definizione della classe) sull'ultima versione di rails !! – mArtinko5MB

5

Se iafonov soluzione non funziona, si può solo avere includere NumberHelper senza il prefisso.

6

Basta passare il view_context all'inizializzatore della sottoclasse di Prawn.

def initialize(quote, view_context) 
    super() 
    @view = view_context 
end 

in Controller, passare alla:

QuotePdf.new(@quote, view_context) 

poi nel Prawn sottoclasse, questo funzionerà:

@view.number_with_precision(quote.sum) 
+0

Mi piace molto questo metodo, poiché mantiene @view e i suoi metodi distinti. In questo modo non avrai mai qualcosa da ActionView che accidentalmente monkeypatch qualcosa in Prawn :: Document. – sockmonk

Problemi correlati