2016-05-12 3 views
0

Ich verwende die axlsx Gem, um Excel-Tabellen zu generieren. Ich versuche, die generierte Tabelle an das Modell zum Zippen zu senden. Diese Methode reißt die Excel-Datei mit einigen anderen Dateien.Schienen: Senden Sie eine Datei, die von einer Axlsx-Ansicht generiert wurde, an ein Modell

Das Verfahren in meinem Modell sieht wie folgt aus:

def zipper 
    tempfile = Tempfile.new 
    children = self.children_with_forms 

    Zip::OutputStream.open(tempfile) do |stream| 
    children.each do |child| 
     directory = "#{child.wide_reference[0,3]}/" 

     if child.model_name == "Position" 
     stream.put_next_entry("#{child.volume} #{child.title} TOC.xlsx") 
     stream.print IO.read(Rails.application.routes.url_helpers.toc_path(format: :xlsx, position_id: child.id)) 
     end 

     stream.put_next_entry("#{directory}#{child.wide_reference}-#{child.short_name}-#{child.title.truncate(15, omission:'')}.docx") 
     stream.print IO.read(child.download_form.path) 
    end 
    end 

    tempfile 
end 

Der Teil I Probleme habe mit ist:

if child.model_name == "Position" 
    stream.put_next_entry("#{child.volume} #{child.title} TOC.xlsx") 
    stream.print IO.read(Rails.application.routes.url_helpers.toc_path(format: :xlsx, position_id: child.id)) 
    end 

Wie kann ich die erzeugte Datei in das Modell zu bekommen?

+0

agustaf, sollten Sie Ihre endgültige Lösung hier posten und Ihre eigene Antwort als richtig markieren.. – noel

Antwort

0

Am Ende musste ich die Ansicht aus dem Inneren des Modells rendern mit: ActionView::Base.new(ActionController::Base.view_paths, {key: value}), dank der Hilfe, die ich erhielt here.

Unten ist, was am Ende funktionierte.

def download 
    tempfile = Tempfile.new 
    children = self.children_with_forms 
    Zip::OutputStream.open(tempfile) do |stream| 
    children.each do |child| 
     directory = "#{child.wide_reference[0,3]}/" 
     if child.model_name == "Position" 
     av = ActionView::Base.new(ActionController::Base.view_paths, {position: child, model: child.model}) 
     stream.put_next_entry("#{directory}#{child.volume} #{child.title} TOC.xlsx") 
     @position = child 
     @model = child.model 
     stream.print av.render template: 'pages/toc.xlsx.axlsx' 
     end 
     stream.put_next_entry("#{directory}#{child.wide_reference} #{child.title.truncate(15, omission:'')} (#{child.short_name}).docx") 
     stream.print IO.read(child.download_form.path) 
    end 
    stream.put_next_entry("Excel File.xlsx") 
    av = ActionView::Base.new(ActionController::Base.view_paths, {model: self}) 
    stream.print av.render template: 'pages/excel_file.xlsx.axlsx' 
    end 
    tempfile 
end 

HINWEIS: „Modell“ ist der Name der Klasse, dass diese Methode in ist

Verwandte Themen