我的應用程序接受文件上傳,一些元數據存儲在數據庫中,文件本身在文件系統上。我試圖在文件上傳和後期處理完成之前在應用程序中使元數據可見,但由於保存是事務性的,因此我沒有成功。我已經嘗試過回調,並調用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