2016-09-18 7 views
3

私のRailsアプリケーションでは、モデルメソッドでCSV.openブロックを使用してCSVファイルを作成します。私のコントローラで自己生成されたcsvファイルを保存せずにメールで送信するにはどうすればいいですか?

class SomeModel 
    def self.write_csv 
     CSV.open("my_file_name.csv", "w") do |csv| 
     ### inserts lines into the file ### 
     end 
    end 
end 

、私はJobMailerでは、ユーザの入力したメールアドレス

def some_controller_method 
    SomeModel.write_csv 
    email = params[:email] 

    JobMailer.send_csv(email).deliver 
end 

にファイルを送信し、アクションを持って、私は、直接ファイル名でファイルを参照するためCSV.openブロックからSomeModel.write_csvは、メインディレクトリのディスクにファイルを保存します。

def send_csv(email) 
    attachments['my_file_name.csv'] = {mime_type: 'text/csv', content: File.read(Rails.root.join('your_file.csv'))} 
    mail(to: email, subject: 'My subject', body: 'My body.') 
end 

現在、新しいリクエストが来たときにアプリがファイルの上に書き直します、と私はHerokuの上の生産にプッシュするとき、それは自動的にいくつかの時間後にそれを削除します信じています。要約すると

  1. ファイル

を削除メーラー

  • を経由して、それをメールでCSV
  • を生成することは、これはそれをディスクに保存せずに行うことができますか?より良い方法がありますか?

  • +0

    を生成するCSV番号を使用できますか? –

    答えて

    9

    あなたは「CSV.open」コードを書くファイルするクラスメソッド

    class SomeModel 
        def self.generate_csv 
         CSV.generate do |csv| 
         ### inserts lines into the file ### 
         end 
        end 
    end 
    
    def some_controller_method 
        csv = SomeModel.generate_csv 
        email = params[:email] 
    
        JobMailer.send_csv(email, csv).deliver 
    end 
    
    def send_csv(email, csv) 
        attachments['my_file_name.csv'] = {mime_type: 'text/csv', content: csv} 
        mail(to: email, subject: 'My subject', body: 'My body.') 
    end 
    
    関連する問題