Rails 使用 jQuery File Upload 的同学请绕开 Rails 3.2.13

machixian · 2013年05月27日 · 最后由 yangming 回复于 2013年11月03日 · 4616 次阅读

这两天尝试学习用 jQuery file upload+Carrierwave 做文件上传功能,使用的是 simple_form,结果碰到了一个很奇怪的问题,在学习 Railscasts 381 jQuery file upload 的时候里面明确的说了当 input field 的 multiple 设置为 true 的时候要将其 name 由默认的"image[name][]"成"image[name]",即把后面的中括号去掉,因为 jQuery file upload 会默认将文件一个个上传而不是一次提交所有的文件,要不改的话 Carrierwave 会报错的,所以就很自然的用 simple_form 这么做了

<%= f.input :name, :label => "Upload image", :input_html => { :multiple => true, :name => "image[name]" }, as: :file %>

但是出来的结果却是

<div class="controls">
  <input type="file" name="image[name][]" multiple="multiple" id="image_name" class="file optional">
</div>

name 属性没有变化,因为之前看 Railscast 里面用的是 f.file_field 来自定义的,所以就想当然的认为问题出在 simple_form 上面,然后就是各种 Google,结果当然是一无所获。最后终于则决定放弃 simple_form,直接使用 rails 带的 from builder 吧,然后才发现问题依旧,使用下面的代码依旧不能自定义 name 属性

<%= f.file_field :path, multiple: true, name: "image[name]" %>

后来使用"f.file_field override :name "这个关键字终于搜到了 github 上面的这个issue,敢情问题是出在 Rails 身上。

最后将 Rails 降到 3.2.12 之后问题就解决了。

我也是有遇到這問題,後來直接在 js 指定參數就解決了

$('#fileupload').fileupload({ paramName: 'Model 名稱 [欄位名稱]' });

以我的情形就是 paramName: 'user[avatar]'

这个问题已经修复了

3 楼 已删除
4 楼 已删除
需要 登录 后方可回复, 如果你还没有账号请 注册新账号