新手问题 自学笔记专区—004 active storage 判断是否是否是新上传的文件

y9info · 2022年01月10日 · 最后由 y9info 回复于 2022年01月17日 · 345 次阅读

问题提出:

在使用 active storage 上传文件后,难免要对上传的文件进行后续的管理,譬如重命名,譬如归类,譬如增加标识等等,但是文件上传后,从文件列表中,怎么判断这个文件是新上传的文件呢?

问题解决:

经过查询 api,发觉 new_record?方法并不适合,但是 rails 提供了一个非常对应的方法 previously_new_record?完美解决了这个问题,如果此对象刚刚创建,则返回 true,也就是说,在上次保存之前,该对象在数据库中不存在,会返回真。

if @todo_item.update(todo_item_params) 
   @todo_item.files.each do |file| 
    if file.previously_new_record? 
      @new_files << file
    end 
  end 

不知道你的最新是什么标准,如果要我判断的话,不应该是最后一个吗?数字 Id 最大,或者创建时间最新。

看了 previously_new_record 实现,依赖当前内存状态。

新上传,是指用户刚上传的那个或那几个文件,并不要求是系统里边创建时间最近的那个文件。 这个当时我的需求场景是,通过在 update 页面中,通过 active_storage 上传文件(update 页面也允许不上传文件),update 更新过程中读取更新后的对象的 files,并判断哪些是新上传的文件,并对新上传文件进行处理。

如果通过 id 最大或创建时间最新来判断,需要读取刚上传文件的 blob_id,读取对应的文件的创建时间等等,应该也能实现,但是如果用户一次同时更新上传好几个文件,或者几个用户同时进行了操作上传文件的操作,可能代码变复杂了。

有这个 previously_new_record?现成的功能,直接用起来也非常爽利。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号