:remote => true在表单中使用文件上传器时不起作用

Chr*_*ton 20 ajax jquery ruby-on-rails ruby-on-rails-3

基本上,当我在表单中包含并使用文件上传器时,它似乎取消了:remote => true功能,并将操作作为HTML代替JS处理.有任何想法吗?

sim*_*aob 13

我刚刚面临同样的问题,并发现以下替代方案使其工作:

Gem remotipart => http://www.alfajango.com/blog/rails-3-ajax-file-uploads-with-remotipart/

jQuery插件'jaxy'=> https://github.com/adamlogic/jquery-jaxy

我想我更喜欢第一种选择.但是有选择权是件好事.=)

  • Remotipart很棒,仍然适用于Rails 4.这里是github页面的直接链接,文档为https://github.com/JangoSteve/remotipart. (5认同)

Jai*_*put 6

你不能通过AJAX上传文件,所以显然你的请求是纯HTML,因为你没有特定的东西:js和rails认为它只是一个简单的HTML POST请求.

https://github.com/JangoSteve/remotipart

gem 'remotipart', '~> 1.2'
Run Code Online (Sandbox Code Playgroud)

然后 bundle install

//= require jquery.remotipart
Run Code Online (Sandbox Code Playgroud)

sample_layout.html.erb

<%= form_for @sample, :html => { :multipart => true }, :remote => true do |f| %>
  <div class="field">
    <%= f.label :file %>
    <%= f.file_field :file %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>
Run Code Online (Sandbox Code Playgroud)

在控制器中

def create
  respond_to do |format|
    if @sample.save
      format.js
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

create.js.erb

// Display a Javascript alert
alert('success!');
<% if remotipart_submitted? %>
  alert('submitted via remotipart')
<% else %>
  alert('submitted via native jquery-ujs')
<% end %>
Run Code Online (Sandbox Code Playgroud)