2017-05-02 3 views
0

Ich versuche, eine Tempfile zu erstellen mit einigen Benutzer eingegebenen Informationen in einer meiner Modelle:eine Tempfile zu Carrierwave in Rails hochladen

after_create :form_to_csv 

def form_to_csv 
    temp_file = Tempfile.new('test_temp.csv', encoding: 'utf-8') 

    begin 
    self.input_data.split('\n').each do |line| 
     temp_file.write line 
    end 

    temp_file.rewind 
    self.build_input_data_file(file: Rails.root.join("temp_file.path}").open) 
    ensure 
    temp_file.close 
    temp_file.unlink 
    end 
end 

Die Formulardaten werden im input_data Feld als Text gespeichert. Ich kann meine Daten erfolgreich in die Temp-Datei schreiben, aber das Anhängen an das Modell ist umständlich - ich versuche immer, nil an mein Modell anzuhängen. Mein Hauptproblem ist, dass die Datei, die ich generieren hat einen Pfad wie:

/var/folders/jw/7pjlw_212qd3s4ddfj1zvnpr0000gn/T/test_temp.csv20170502-78762-1eh23ml 

und es wird nicht mit Rails.root.join arbeiten und mit dem Befestigungsverfahren vorzuschlagen, bei CarrierWave docs here (Upload aus einer lokalen Datei) .

+0

Haben Sie versucht, das 'temp_fie'-Objekt direkt auf die Option' file' zu ​​übertragen? –

Antwort

0

Mein Fehler war, dass ich versuchte, eine CSV-Erweiterung innerhalb des Dateiname-Parameters des Tempfile-Objekts zuzuweisen. Stattdessen musste ich ein Array wie folgt übergeben:

def form_to_csv 
    temp_file = Tempfile.new(['test_temp', '.csv'], encoding: 'utf-8') 

    begin 
    self.input_data.split('\n').each do |line| 
     temp_file.write line 
    end 

    temp_file.rewind 

    self.build_input_data_file(file: Rails.root.join(temp_file.path).open) 
    ensure 
    temp_file.close 
    temp_file.unlink 
    end 
end 
Verwandte Themen