Ka *_*Mok 9 csv ruby-on-rails heroku
在我的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
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我有一个动作将文件发送到用户输入的电子邮件地址
def some_controller_method
SomeModel.write_csv
email = params[:email]
JobMailer.send_csv(email).deliver
end
Run Code Online (Sandbox Code Playgroud)
在JobMailer,我直接通过文件名引用文件,因为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
Run Code Online (Sandbox Code Playgroud)
目前,当新的请求进入时,应用程序将重写该文件,我相信当我在Heroku上进行生产时,它会在一段时间后自动删除它.
回顾一下:
可以在不将其保存到磁盘的情况下完成吗?有没有更好的办法?
Sai*_*Haq 23
您可以使用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, subject: 'My subject', body: 'My body.')
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4532 次 |
| 最近记录: |