2015-06-15 1 views
2

Я пытаюсь сохранить pdf на сервере, используя модель рельсов, но сгенерирует пустой pdf-файл. Раньше он работал в контроллере без проблем, но теперь он создал пустую. Любая идея Что я сделал неправильно?Rails 4 wicked_pdf генерировать пустой pdf при генерации из модели

def generate_bulk_pdf 
    view = ActionView::Base.new(ActionController::Base.view_paths, {}) 
    view.extend(ApplicationHelper) 
    view.extend(AbstractController::Rendering) 
    view.extend(Rails.application.routes.url_helpers) 
    students = Student.all.order('id ASC') 
    students.each do | aStudent | 
    pdf = WickedPdf.new.pdf_from_string(
     view.render_to_string(
     :template => "#{Rails.root.join('templates/challen.pdf.erb')}", 
     :locals => { '@student' => aStudent } 
     ) 
    ) 
    save_path = Rails.root.join('pdfs','filename.pdf') 
    File.open(save_path, 'wb') do |file| 
     file << pdf 
    end 
    end 
end 

Любая идея Что я сделал не так? Я не могу найти какое-либо решение.

+0

проверьте этот символ '# {Rails.root.join ('templates/challen.pdf.erb')}' убедитесь, что вы запустили его в отладчике, чтобы увидеть, как он указывает на нужное место. Также вы уверены, что вам нужен этот 'view.extend (AbstractController :: Rendering)'. Наконец, я могу увидеть ваш шаблон, где находится ваш макет? –

+0

Без view.extend (AbstractController :: Rendering) view.render_to_string не работает, и мой храм присутствует в папке шаблонов, которая находится в корневом пути – TayyabZahid

ответ

3

Хороший тест просто поместил простую строку текста в ваш шаблон и посмотрел, есть ли у вас PDF-файл с этой линией. Сбросьте все обратно, чтобы вы просто создали PDF без каких-либо местных жителей, всего лишь одну строку и дайте мне знать.

Вот как я создал мой, и она отлично работает, он может нажать что-нибудь :)

def generate_pdf_voucher(voucher, dir_name) 
    view = ActionView::Base.new(Rails.root.join('app/views')) 
    view.class.include ApplicationHelper 
    view.class.include Rails.application.routes.url_helpers 

    pdf = view.render :pdf => a_name, 
         :template => 'layouts/pdfs/voucher_pdf', 
         :layout => 'layouts/pdfs/pdf.html.erb', 
         :header => {:right => '[page] of [topage]'}, 
         :locals => {:@voucher => voucher} 
    # then save to a file 
    pdf = WickedPdf.new.pdf_from_string(pdf) 

    save_path = Rails.root.join('public', 'pdfs', dir_name, "#{voucher[:user].id.to_s}.pdf") 
    File.open(save_path, 'wb') do |file| 
     file << pdf 
    end 
end 

pdf.html.erb является структура PDF voucher_pdf все динамический материал

Если это WASN 't полезно, затем поставьте комментарий, и я удалю его.

+0

Спасибо человеку. Это работает для меня. – TayyabZahid

+0

Рад, что это сработало –

+0

У меня была ошибка: 'ActionView :: Template :: Error: undefined method host for nil: NilClass' on link_to, поэтому я добавил это, чтобы исправить это' view.class_eval do; включают Rails.application.routes.url_helpers; self.default_url_options = Rails.application.config.action_controller.default_url_options end' –