2012-03-14 8 views
7

Próbuję użyć rails 3.2 pomocników wewnątrz klasy prawn, ale szyny rzuca:Rails/Prawn: w jaki sposób używam pomocników szyn w klasie Prawn?

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

Prawn Klasa

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 

Dziękujemy za pomoc.

Odpowiedz

11

Musisz jawnie dołączyć ActionView::Helpers::NumberHelper (lub inną klasę/moduł pomocnika) do swojej klasy dokumentu krewetki.

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

    def initialize(quote) 
    super() 

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

działa dobrze dla mnie w Rails 3.2.11. Siekfried nie. Dzięki! –

+0

include musi znajdować się poza klasą (przed definicją klasy) w najnowszej wersji rails !! – mArtinko5MB

5

Jeśli iafonov rozwiązanie nie działa, może po prostu trzeba to NumberHelper bez prefiksu.

6

Po prostu prześlij view_context do inicjalizatora podklasy krewetki.

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

w kontrolerze, aby zmienić:

QuotePdf.new(@quote, view_context) 

następnie w Prawn podklasy, to będzie działać:

@view.number_with_precision(quote.sum) 
+0

Bardzo podoba mi się ta metoda, ponieważ zachowuje podgląd i jego metody odrębne. W ten sposób nigdy nie będziesz mieć czegoś z ActionView przypadkowo monkeypatch coś w Prawn :: Dokument. – sockmonk

Powiązane problemy