ruby-on-rails – 如何在Rails中通过电子邮件发送自生成的csv文件而不保存它?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 如何在Rails中通过电子邮件发送自生成的csv文件而不保存它?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的Rails应用程序中,我使用模型方法中的CSV.open块创建CSV文件.
class SomeModel
   def self.write_csv
      CSV.open("my_file_name.csv","w") do |csv|
         ### inserts lines into the file ###
      end
   end
end

在我的控制器中,我有一个动作将文件发送到用户输入的电子邮件地址

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

   JobMailer.send_csv(email).deliver
end

在JobMailer中,我直接通过文件名引用文件,因为SomeModel.write_csv中的CSV.open块将文件保存到主目录的磁盘上.

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上进行生产时,它会在一段时间后自动删除它.

回顾一下:

>生成CSV
>通过Mailer发送电子邮件
>删除文件

可以在不将其保存到磁盘的情况下完成吗?有没有更好的办法?

解决方法

您可以使用CSV#generate class方法
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,body: 'My body.')
end
原文链接:https://www.f2er.com/ruby/267781.html

猜你在找的Ruby相关文章