使用Rails Paperclip gem,如果模型无效,如何临时保存上传的文件

gsm*_*oza 5 ruby-on-rails

我正在使用paperclip gem将文件附加到模型.使用Paperclip上载文件时,仅在保存模型时保存文件.因此,如果模型无效,则不保存上载的文件.有没有办法临时保存上传的文件,这样如果模型无效,用户不必上传同一个文件?

nas*_*orn 2

定义一个before_save方法来检查对象是否有效,如果没有将文件保存到磁盘,则给它一个唯一的名称(创建一些散列)

将其放入您发回的表单中的隐藏字段中

删除表单中的上传字段

现在在方法的 else 分支中before_save检查是否有hidden_fieldprevious_upload 或者无论你如何命名它如果有加载图片并将其分配给回形针属性,它可以计算出其余的内容

attr_accessor :previous_upload

def before_save
  if valid?
    if previous_upload
      paperclip_file = #Load paperclip_file from /tmp
    else
      previous_upload = nil
    end
  else
    previous_upload = "Some unique key for each upload like ip and time or such"
    # Save paperclip_file with name previous_upload to /tmp
  end
end 
Run Code Online (Sandbox Code Playgroud)