2016-04-12 4 views
0

Ich habe Schwierigkeiten, eine einfache Rake-Aufgabe erstellen, die eine CSV-Dump der Datenbanktabelle "Baselines" generieren wird.Rails: Erstellen einer CSV-Datei in einer Rake-Task - kann nicht auf eine Klassen-Datenbank spalten_Spalten

task :send_report => :environment do 
    path = "tmp/" 
    filename = 'data_' + Date.today.to_s + '.csv' 
    Baseline.all.each do 
    CSV.open(path + filename, "wb") do |csv| 
     csv << Baseline.column_names 
     Baseline.all.each do |p| 
     csv << p.attributes.values_at(*column_names) 
     end 
    end 
    end 
end 

Ich erhalte den Fehler

 undefined local variable or method `column_names' for main:Object 

Ich bin völlig unklar, warum das so ist .... Baseline.column_names wird in der Konsole arbeiten, in einer Ansicht etc etc.

Beliebig Gedanken würden geschätzt.

Antwort

1

Sie geben Baseline.column_names im ersten Fall, aber nur column_names auf Ihrem values_at Anruf an. Dies ist standardmäßig der main Kontext, in dem keine solche Methode existiert. Es muss gegen ein Modell aufgerufen werden.

Machen Sie diese beiden konsistent, Baseline ist in beiden Fällen erforderlich.

+0

Vielen Dank! - das scheint zu funktionieren (es wirft keinen Fehler). Das Problem, das ich jetzt habe, ist, dass die Datei nicht im tmp-Verzeichnis im öffentlichen Ordner erscheint. – GhostRider

+0

Warum sollte es? Sie fragen nach 'tmp /' relativ zum aktuellen Verzeichnis, das wahrscheinlich der Rails-Root ist. Wenn du es dort haben wolltest: 'path = Rails.root.join ('public/tmp')'. – tadman

+0

Vielen Dank. Als korrekt markiert, da beide Kommentare zusammen mein Problem gelöst haben – GhostRider