【发布时间】:2011-08-18 23:27:34
【问题描述】:
对于 Rails 中的嵌套表单、多文件上传和进度条,我有相当深奥的用例。到目前为止,我还没有找到任何关于此的在线讨论。如果我忽略了什么,我很抱歉。请纠正我。
这就是我想要的:
- 给定的表单有多个动态字段。其中之一是“附加文件”。
- 对于这个“附加文件”,我想要一个本质上类似于 gmail 的界面。
- 该界面使您能够:
- 点击“附加文件”。
- 选择一个本地文件,它会立即在后台开始上传,同时为您提供一个进度条。
- 这允许您编写消息或添加更多文件。
- 您可以取消实时上传,甚至可以在事后通过取消选中某个框来删除附件。
以下是我正在使用的模型和关联。
- 我有一个模型 Recording,它有很多 AudioFiles。
- 每个 AudioFile 都包含音频数据,以及大小、类型、创建日期等元数据。
- 一个录音还有其他几个子集合。
以下是“创建录音”表单的行为方式:
- 它应该允许用户添加多个子字段,包括多个音频文件..
- 到目前为止,我正在使用出色的嵌套表单 (https://github.com/ryanb/nested_form) gem 来创建录音的非 AudioFile 子项。 IT 工作非常出色。
- 我想要的是能够有类似的嵌套字段来异步上传多个音频文件,带有进度指示器,并且能够取消或删除上传的文件。
有许多资源演示了如何将上传器与carrierwave 结合使用来存储带有进度信息的文件。例如,https://github.com/yortz/carrierwave_jquery_file_upload 和 https://github.com/blueimp/jQuery-File-Upload/wiki/Rails-setup-for-V5。
本质上,这些示例的作用是从这些上传器之一生成请求,该请求被定向到控制器为模型创建操作,该模型附加了载波上传器。我有这么多工作要做。
我不知道如何在嵌套表单上下文中执行此操作。棘手的地方是:
- 假设我编写了 AJAX 以从“创建录音”表单中发布帖子,并让该帖子创建新的 AudioFile 记录。如何将该音频文件与尚未创建的录音相关联?
- 如果用户中止事务,那么创建的 AudioFile 记录将如何被清理?
我可以想到实现上述两个方面的 hacky 方法,但我想知道是否有更优雅的方法。我对 Rails 比较陌生,所以我猜我没有充分利用它。
谢谢, 阿普尔瓦
【问题讨论】:
标签: ruby-on-rails progress-bar nested-forms carrierwave