【发布时间】:2019-03-19 01:00:09
【问题描述】:
我正在使用ruby gem 进行 gpx 解析和编辑。我想将编辑后的结果存储在活动存储中。
宝石有这种保存方法
def write(filename, update_time = true)
@time = Time.now if @time.nil? || update_time
@name ||= File.basename(filename)
doc = generate_xml_doc
File.open(filename, 'w+') { |f| f.write(doc.to_xml) }
end
ActiveStorage 有一个保存的例子
@message.image.attach(io: File.open('/path/to/file'), filename: 'file.pdf')
我可以同时使用这两种方法,它应该可以工作,但是我将文件写入两次,并且文件系统上有一个额外的不需要的文件,需要稍后手动删除。
理想的情况是让 gpx gem 直接将数据传递给 ActiveStorage,让 AS 成为唯一保存文件的人。
鉴于write() 似乎是导出/保存数据的唯一方法,而generate_xml_doc 是一种私有方法,有没有什么方法可以在不分叉 gem 或猴子修补的情况下实现这一点?
【问题讨论】:
-
您当然可以在其中一种或两种方法中使用Tempfile,这将有助于自动清理本地文件
-
这是我的想法,但是 write 方法需要一个文件名字符串而不是对临时文件的引用,所以我不知道如何让 gem 写入临时文件。
-
查看我刚刚发布的答案
标签: ruby-on-rails ruby rails-activestorage