2016-04-12 20 views
0

データベーステーブル "baselines"の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になります。それはモデルに対して呼び出さなければなりません。

これらの2つを一致させるには、どちらの場合でもBaselineが必要です。

+0

ありがとうございます。 - それは動作しているようです(エラーは発生しません)。私が今行っている問題は、ファイルがパブリックフォルダのtmpディレクトリに表示されていないことです。 – GhostRider

+0

なぜでしょうか?現在のディレクトリ(おそらくRailsのルート)に対する 'tmp /'を求めています。あなたがそれを望むなら、 'path = Rails.root.join( 'public/tmp')'。 – tadman

+0

多くのありがとう。両方のあなたのコメントが一緒に私の問題を解決したとして正しいとマーク – GhostRider

関連する問題