活动存储:表单重新显示时保留/缓存上传文件的最佳实践
Posted
技术标签:
【中文标题】活动存储:表单重新显示时保留/缓存上传文件的最佳实践【英文标题】:Active Storage: Best practice to retain/cache uploaded file when form redisplays 【发布时间】:2018-10-25 21:12:54 【问题描述】:当使用 Active Storage 上传文件时,当文件完成上传并重新显示表单时,例如当该表单的验证由于某种原因失败时,文件就消失了。
有没有办法在表单重新显示之间缓存或保留它? Shrine has a nice Plugin 为此,我正在为 Active Storage 寻找类似的东西。
【问题讨论】:
你有办法解决这个问题吗? 很遗憾没有。仍然坚持使用 Shrine,它工作得很好,还有一些其他很棒的功能仍然缺少 Active Storage,比如将文件作为数据 URI 上传。 @cseelus 下面发布的解决方案 dmitry 有什么问题?我知道它会在 Rails 6 中停止工作,但它可以工作。而且明年6.0降下来就可以轻松移除了。 【参考方案1】:对于那些寻找has_many_attached
解决方案的人
https://github.com/rails/rails/issues/35817#issuecomment-484158884
<% if @product.photos.attached? %>
<% @product.photos.each do |ph| %>
<%= f.hidden_field :photos, value: ph.signed_id %>
<% end %>
<% end %>
【讨论】:
您在 Rails API 文档中的哪个位置看到 hidden_field 助手接受“multiple: true”选项?另外我不知道 html 规范允许在输入上使用这样的属性 对不起,这可能是一个错字(你是对的,多个不是一个选项 + 不需要多个,因为我正在用#each 循环浏览照片)让 mi 修复它。 (multilple: true
已移除)【参考方案2】:
这是使 ActiveStorage 文件在表单重新显示时保持不变的解决方案:
f.hidden_field :image, value: f.object.image.signed_id if f.object.image.attached?
f.file_field :image
【讨论】:
Dmitry 我现在想给你买很多啤酒,你救了我的理智!谢谢! 对于任何想要使用它的人,请注意,不幸的是,这与 Rails master 中的新更改不兼容,它将新上传的文件存储在保存而不是分配 github.com/rails/rails/pull/33303 幸运的是,Rails 6 将发生重大变化,这只是一个遥远的未来。 Rails 5.2.1 现在有signed_id 值:) 如果有人在 Rails 6 中有这个问题的解决方案,请回答这个问题:***.com/questions/56649565/…以上是关于活动存储:表单重新显示时保留/缓存上传文件的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章
在用户注销时保留 CoreData 对象的最佳方法(NSUserDefaults?)
使用 jquery 删除活动存储附件并重新渲染附件有帮助吗?最佳做法是啥?