在Rails 6中使用activestorage时,可以通过以下步骤在重新显示表单时保留文件:
avatar
,可以在表单中添加一个隐藏字段avatar_cache
。<%= form_with(model: @user, local: true) do |form| %>
<%= form.file_field :avatar %>
<%= form.hidden_field :avatar_cache %>
<%= form.submit %>
<% end %>
@user.avatar.cache_id
来获取已上传文件的标识符。def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
# 保存成功后,将已上传文件的标识符赋值给隐藏字段
@user.avatar.cache_id = @user.avatar.blob.id
redirect_to @user
else
render 'new'
end
end
before_save
回调来处理已上传文件的保留。在回调中,将隐藏字段中的标识符赋值给文件字段。class User < ApplicationRecord
has_one_attached :avatar
before_save do
if avatar_cache.present?
avatar.blob = ActiveStorage::Blob.find_by(id: avatar_cache)
end
end
end
这样,当表单提交失败时,重新显示表单时会自动保留已上传的文件。
对于Rails 6中使用activestorage的更多信息,你可以参考腾讯云对象存储(COS)的相关产品和文档:
请注意,以上答案仅供参考,具体实现可能因应用场景和需求而有所不同。
领取专属 10元无门槛券
手把手带您无忧上云