Rails / Prawn: как мне использовать помощников rails внутри класса Prawn? - PullRequest
7 голосов
/ 14 марта 2012

Я пытаюсь использовать rails 3.2 помощников внутри prawn класса, но бросает рельсы:

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

Класс креветок

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

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

Контроллер

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

Спасибо за вашу помощь.

Ответы [ 3 ]

12 голосов
/ 15 марта 2012

Вы должны явно включить ActionView::Helpers::NumberHelper (или любой другой вспомогательный класс / модуль) в ваш класс документа креветок.

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

  def initialize(quote)
    super()

    text "sum: #{number_with_precision(quote.sum)}"
  end
end
7 голосов
/ 12 сентября 2012

Просто передайте view_context инициализатору подкласса креветок.

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

в контроллере, измените на:

QuotePdf.new(@quote, view_context)

, затем в подклассе креветок, это будетработа:

@view.number_with_precision(quote.sum)
5 голосов
/ 11 июля 2012

Если решение iafonov не работает, возможно, вам просто нужно включить NumberHelper без префикса.

...