Rails rails7.1 以后版本,使用 activestorage 在 update 对象过程中,追加附件而不删除已有附件的方法

y9info · 2024年12月23日 · 29 次阅读

问题:升级 rails7.1 后版本后,config.active_storage.replace_on_assign_to_many = true 来实现 active_storage 增加附件,而不是覆盖已有附件的方法已经被取消,新的解决方案是什么? 回答:在控制器中使用“attach”方法,大致思路是,从前端传过来的参数 hash 列表中,update 先剔除附件参数,对增加的附件参数,单独适用 attach 方法升级到附件列表中。参考代码如下:

模型:

class Post < ApplicationRecord
   has_many_attached :images
end

控制器 update 方法变更后:

def update
 respond_to do |format|
   if @post.update(post_params.reject { |k| k["images"] })
     if post_params[:images].present?
       post_params[:images].each do |image|
         @post.images.attach(image)
       end
     end
     format.html { redirect_to @post, notice: 'Post was successfully updated.' }
     format.json { render :show, status: :ok, location: @post }
   else
     format.html { render :edit }
     format.json { render json: @post.errors, status: :unprocessable_entity }
   end
 end
end
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请 注册新账号