我的应用程序接受文件上传,一些元数据存储在数据库中,文件本身在文件系统上。我试图在文件上传和后期处理完成之前在应用程序中使元数据可见,但由于保存是事务性的,因此我没有成功。我已经尝试过回调,并调用create_or_update()而不是save(),都无济于事。有没有办法做到这一点,而不重写ActiveRecord :: Base的胆量?我甚至试图命名方法make()而不是save(),但是令人困惑的是没有任何效果。非事务性地保存ActiveRecord
下面的代码“工作”很好,但数据库不会被修改,直到一切完成。
def save(upload)
uploadFile = upload['datafile']
originalName = uploadFile.original_filename
self.fileType = File.extname(originalName)
create_or_update()
# write the file
File.open(self.filePath, "wb") { |f| f.write(uploadFile.read) }
begin
musicFile = TagLib::File.new(self.filePath())
self.id3Title = musicFile.title
self.id3Artist = musicFile.artist
self.id3Length = musicFile.length
rescue TagLib::BadFile => exc
logger.error("Failed to id track: \n #{exc}")
end
if(self.fileType == '.mp3')
convertToOGG();
end
create_or_update()
end
任何想法都会非常受欢迎,谢谢。
更正:数据库在上传完成后,但在转换完成之前被修改。这一刻变得越来越陌生。 – theFunkyEngineer 2010-06-17 15:37:19