导轨AJAX上传的形式与Remotipart [英] Rails AJAX upload form with Remotipart
问题描述
我一直在抨击我的头试图让一个AJAX上传表单的工作。我使用Rails 3.2。我把宝石remotipart,〜> 1.0
在我的Gemfile,跑捆绑安装
并成功安装
I've been bashing my head trying to get an AJAX upload form working. I'm using Rails 3.2. I put gem "remotipart", "~> 1.0"
in my Gemfile, ran bundle install
and it installed successfully.
我previously过这样的非Ajax上传表单,这是我加入:远程=>真正的
来按在 github上页文献:
I previously had this non-ajax upload form, which I added :remote => true
to as per the literature on the github page :
<%= form_tag "/administration/data_imports", :multipart => true, :remote => true %>
<label for="file">Input File</label> <%= file_field_tag "file" %>
<button type="submit">Import Data</button>
</form>
和在我的 data_imports_controller
创建
操作:
def create
file = params[:file]
filename = file.original_filename
end
我添加了一个包括我页 jquery.remotipart.js
JavaScript的,因为它认为必要的,尽管那里是没有明确的指示这样做的。
I added a javascript include on my page for jquery.remotipart.js
because it felt essential, albeit there being no explicit instruction to do so..
我试了一下,并没有给人一种服务器错误:
I tried it and it failed giving a server error:
Completed 500 Internal Server Error in 4ms
NoMethodError (undefined method `original_filename' for nil:NilClass):
app/controllers/data_imports_controller.rb:16:in `create'
很明显我在做一些根本性的错误,但我需要一只手。
It's clear I'm doing something fundamentally wrong, but I need a hand.
推荐答案
一吨的调试,并通过大量的code看完之后,我终于有最新的宝石(1.0.2)使用Rails 3.2.8的工作。我被钉三个陷阱:
After a ton of debugging and reading through lots of code, I finally have the latest gem (1.0.2) working with Rails 3.2.8. I was nailed by three gotchas:
- 在我被禁用我以前的文件输入字段表单提交,这将导致remotipart忽略它列入IFRAME提交。你必须确保你的文件输入被启用。这可能是你所看到的,为什么指定一个不同的选择的'文件'属性为你工作。
- 在我的调试过程中,我被重写jquery.iframe运输与最新的上游源头,它并没有为在iframe在X-HTTP-接受隐变量的支持。您必须使用捆绑在一起的remotipart宝石的版本。
- 请不要忘了要连接一个回调的ajax:填写表格。如果您使用的数据类型比脚本等。这是默认的,如果你没有在全局AJAX选项指定数据类型或使用的数据类型属性的形式。
这篇关于导轨AJAX上传的形式与Remotipart的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!