gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 00:42:43 25 4
gpt4 key购买 nike

在我的 Rails 应用程序中,我在模型方法中使用 CSV.open block 创建一个 CSV 文件。

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

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

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

JobMailer.send_csv(email).deliver
end

JobMailer 中,我直接按文件名引用文件,因为 SomeModel.write_csv 中的 CSV.open block 保存了该文件到磁盘的主目录。

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
  2. 通过 Mailer 通过电子邮件发送
  3. 删除文件

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

最佳答案

您可以使用 CSV#generate 类方法

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

关于ruby-on-rails - 如何在 Rails 中通过电子邮件发送自生成的 csv 文件而不保存它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39553447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com