render_to_string не находит частичные (ответ контроллера PDFKit)

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 ответа

Решение

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

Контроллер извлечения:

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'

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

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

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

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

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

html = render_to_string(:template => "my_view_folder_name/show.html.erb")
Другие вопросы по тегам