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