render_to_string не находит партиалы (ответ контроллера PDFKit) - PullRequest
12 голосов
/ 23 марта 2011

Ruby 1.8.7, Rails 3.0.4, PDFKit 0.5.0

Я пытаюсь создать PDF с PDFKit без использования промежуточного программного обеспечения, поэтому я могу отключить JavaScript (там есть аккордеонное действие, котороескрывает много информации, которая должна быть в PDF).Однако всякий раз, когда я пытаюсь это сделать, он терпит неудачу, потому что говорит, что в моем представлении отсутствуют детали (show.html.erb):

Отсутствуют частичные программы / детали с {: locale => [: en,: en],: format => [: pdf],: handlers => [: erb,: rjs,: builder,: rhtml,: rxml]}

Если удалить ссылки начастично, работает нормально.Я также попытался поместить частичные файлы в тот же каталог с show.html.erb, но безрезультатно.Вот код в действии show моего контроллера:

respond_to do |format| 
  format.html # show.html.erb 
  format.pdf {
    html = render_to_string(:template => "show.html.erb")
    kit = PDFKit.new(html, :disable_javascript => true )
    send_data(kit.to_pdf, :filename => "test_pdf", :type => "application/pdf", :disposition => 'attachment')
  }
end

Есть ли способ сделать это и сохранить частичные значения?

РЕДАКТИРОВАТЬ: сейчас я сделал это:

# config/initializers/pdfkit.rb
PDFKit.configure do |config|
  config.default_options = {
    :page_size => 'Legal',
    :print_media_type => true,
    :disable_javascript => true
  }
end

Недостатком этого является отключение javascript для каждого сгенерированного мной PDF-файла, но пока это подойдет.Любые ответы на исходный вопрос о том, как заставить работать партиалы с render_to_string, по-прежнему приветствуются.

Ответы [ 3 ]

20 голосов
/ 23 апреля 2011

Я столкнулся с этой проблемой сегодня утром и натолкнулся на ваш вопрос во время поиска решения.

Извлечение контроллера:

respond_to do |format|
  format.html
  format.pdf {
    html = render_to_string(:layout => false , :action => "constitution.pdf.haml")
    kit = PDFKit.new(html)
    kit.stylesheets << "#{Rails.root}/public/stylesheets/pdf.css"
    send_data(kit.to_pdf, :filename => "#{@organisation_name} Constitution.pdf",
      :type => 'application/pdf', :disposition => 'inline')        
    return
  }
end

constitution.pdf.haml извлечение:

=render :partial => 'shared/constitution'

Ошибка:

Missing partial shared/constitution with {:locale=>[:en, :e   ...

Через некоторое время, ударившись головой о стену, я догадался и изменил constitution.pdf.haml на:

=render :partial => 'shared/constitution.html.haml'

Я знаю только крошечнуюсумма о рельсах.Неужели (в отличие от моих обычных представлений на Haml) PDFKit требует расширения файла?Это исправлено для меня!

3 голосов
/ 28 мая 2012

Вы также можете установить :formats для render_to_string, чтобы избежать необходимости изменять ваши частичные имена.

html = render_to_string(:layout => false , :action => "show", :formats => :html)

Это заставляет html вместо pdf форматировать оставшуюся часть представления представления. Позволяет вам использовать одни и те же представления / партиалы без изменений для ответов HTML и PDF.

1 голос
/ 23 апреля 2011

Вы должны указать полный путь к вашему шаблону, я думаю:

html = render_to_string(:template => "my_view_folder_name/show.html.erb")
...