问题:升级 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