2012-03-14 7 views
7

estoy tratando de utilizar rails 3.2 ayudantes dentro de una clase prawn, pero los carriles tiros:Rieles/gamba: ¿cómo utilizo los auxiliares de rieles dentro de una clase de gambas?

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

Clase gambas

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

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

controlador

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 

Gracias por tu ayuda.

Respuesta

11

Tiene que incluir explícitamente ActionView::Helpers::NumberHelper (o cualquier otra clase/módulo auxiliar) en su clase de documento de gambas.

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

    def initialize(quote) 
    super() 

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

funcionado bien para mí en Rails 3.2.11. Siekfried no lo hizo. ¡Gracias! –

+0

incluye tiene que estar fuera de la clase (antes de la definición de clase) en la última versión de rieles !! – mArtinko5MB

5

Si iafonov solución no funciona, es posible que sólo tenga que incluir NumberHelper sin el prefijo.

6

Simplemente pase el view_context al iniciador de subclase de gambas.

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

en el controlador, cambie a:

QuotePdf.new(@quote, view_context) 

continuación, en la gamba subclase, esto va a funcionar:

@view.number_with_precision(quote.sum) 
+0

Me gusta mucho este método, ya que mantiene la @view y sus métodos distintos. De esta forma, nunca tendrá algo de ActionView parchear accidentalmente algo en Gambas :: Documento. – sockmonk

Cuestiones relacionadas