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")