2016-04-12 61 views
0

我正在努力創建一個簡單的rake任務,它將生成數據庫表「基線」的csv轉儲。Rails:在rake任務中創建csv文件 - 無法訪問類數據庫column_names

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 

我收到錯誤

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

我完全不清楚這是爲什麼.... Baseline.column_names將在控制檯中工作,在視圖等等等等

任何思想將不勝感激。

回答

1

您在第一種情況下指定Baseline.column_names,但您的values_at調用中只有column_names。默認爲main上下文沒有這種方法存在。它必須針對模型進行調用。

使這兩個一致,Baseline在這兩種情況下都是必需的。

+0

謝謝! - 這似乎工作(它不會引發錯誤)。我現在遇到的問題是該文件沒有出現在公用文件夾的tmp目錄中。 – GhostRider

+0

爲什麼呢?你要求'tmp /'相對於當前目錄,這可能是Rails的根目錄。如果你想在那裏:'path = Rails.root.join('public/tmp')'。 – tadman

+0

非常感謝。標記爲正確,因爲您的意見一起解決了我的問題 – GhostRider