Подтвердить что ты не робот

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],: formats = > [: pdf],: handlers = > [: erb,: rjs,: builder,: rhtml,: rxml ]}

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

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

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

EDIT: пока я это сделал:

# 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, по-прежнему оцениваются.

4b9b3361

Ответ 1

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

Экстракт контроллера:

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 extract:

=render :partial => 'shared/constitution'

Ошибка:

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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