我正在使用carrierwave将文件上传到亚马逊S3和delayed_job_activerecord gem。
我有一个函数,我生成一个xlsx文件并将其上传到亚马逊S3但我收到此错误:
无法为非持久记录创建作业:#< Xlsxfiles id:nil,created_at:nil,updated_at:nil,xlsxfile:nil>
Xlsxfiles是上传者
这是我的功能:
def generate_xlsx(content)
temp_file = Tempfile.new(['users','.xlsx'])
ToXls::Writer.new(content, {:columns => [:name,:address],
:headers => ["name","address"]}).write_io(temp_file)
temp_file.rewind
file = File.open(temp_file)
#self.xlsxfile = file
self.xlsxfile.store!(file)#
#self.write_carrierwave_identifier
self.save!
end
handle_asynchronously :generate_xlsx
这是我称之为功能的地方
def index
@users = User.all.page(params[:page]).per(10)
respond_to do |format|
format.html
format.xls {
s = Xlsxfiles.new
s.generate_xlsx(@users)
redirect_to :back
}
end
end
没有延迟的作业我的功能工作并将文件上传到S3, 但是当我使用延迟作业时,作业会在保存activerecord之前执行,任何解决方案?
答案 0 :(得分:1)
从它的外观来看,您需要在之前保存Xlsxfile
实例,并在其上调用generate_xlsx
。请尝试以下方法:
s = Xlsxfiles.create
s.generate_xlsx(@users)
您可能需要调整Xlsxfile
上的验证,以便它们允许保存空记录。