1.0"在我的 Gemfile 中,运行 bundle install并且安装成-6ren">
gpt4 book ai didi

ruby-on-rails - 带有 Remotipart 的 Rails AJAX 上传表单

转载 作者:行者123 更新时间:2023-12-04 06:15:12 25 4
gpt4 key购买 nike

我一直在努力让 AJAX 上传表单工作。我正在使用 Rails 3.2。我把gem "remotipart", "~> 1.0"在我的 Gemfile 中,运行 bundle install并且安装成功。

我以前有这个非ajax上传表单,我添加了:remote => true根据 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_controllercreate行动:
def create
file = params[:file]
filename = file.original_filename
end

我在我的页面上添加了一个 javascript 包含 jquery.remotipart.js因为它感觉很重要,尽管没有明确的指示这样做..

我试过了,但失败了,出现服务器错误:
Completed 500 Internal Server Error in 4ms

NoMethodError (undefined method `original_filename' for nil:NilClass):
app/controllers/data_imports_controller.rb:16:in `create'

很明显我在做一些根本错误的事情,但我需要帮助。

最佳答案

经过大量调试和阅读大量代码后,我终于有了最新的 gem (1.0.2) 和 Rails 3.2.8 一起工作。我被三个问题搞砸了:

  • 我在提交表单之前禁用了我的文件输入字段,这导致 remotipart 忽略它以包含在 iframe 提交中。您必须确保启用了文件输入。这可能就是您所看到的,以及为什么为 'files' 属性指定不同的选择器对您有用。
  • 在调试过程中,我使用最新的上游源覆盖了 jquery.iframe-transport,它不支持 iframe 中的 X-Http-Accepts 隐藏变量。您必须使用与 remotipart gem 捆绑的版本。
  • 如果您使用的数据类型不是“脚本”,请不要忘记在表单上为 ajax:complete 连接一个回调。如果您没有在全局 ajax 选项中指定 dataType,或者在表单上使用 data-type 属性,则这是默认设置。
  • 关于ruby-on-rails - 带有 Remotipart 的 Rails AJAX 上传表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11954122/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com