ajax fileupload通过rails remotipart gem

时间:2013-02-18 10:46:17

标签: ruby-on-rails ruby-on-rails-3 carrierwave remotipart

我一直在尝试通过remotipart和carrierwave上传图片。简单的fileupload工作正常,我还安装了remotipart gem,它可以通过ajax上传文件。现在的问题是如何通过ajax发送文件(我的意思是jquery部分)。

这就是我试图将文件发送到我的控制器的方法,但它无法正常工作

$("#upload").live("submit",function(e) {

    e.preventDefault();
    var report ={};
    report.file =$("#new_upload").find('#upload_name').val(); 

    $.ajax(this.action, {
        data:  report,
        iframe: true,
        processData: false
    }).complete(function(data) {
        console.log(data);
    });
}); 

这是我的表单代码:

<%= form_for(@upload,:url => { :action => "save_remotipart" },:html => {:multipart => true },:remote => (params[:action] ==  true )) do |f| %>

  <fieldset>
    <legend class='required'>
      Required fields
    </legend>
      <div class="field">
        <%= f.label :name %><br />
        <%= f.file_field :name %>
      </div>
    </fieldset>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

提交表单时没有参数发送到服务器。 在中止我得到了这个:

{"object Object"=>nil}

请帮帮我。

2 个答案:

答案 0 :(得分:2)

您无需执行$(“#upload”)。live(){},添加:remote =&gt;对表单执行true将执行Ajax提交,并正确完成文件上传。

我在我的一个项目中使用它(见下面的表格代码)

<%= simple_form_for @post, :remote => true, :multipart => true do |f| %>

            <%= f.input :content, :label => false, :input_html => { :rows => '2', :id => "ibtb" } %>


        <%= f.input :file, :label => false %>

        <%= f.button :submit, "Post" %>
<% end %>

我正在使用simple_form gem,但它也适用于普通表单,因为它们最终都会生成HTML。 gem的github页面中的示例也不使用simple_form。

希望这有帮助。

答案 1 :(得分:0)

我有同样的问题。按照这个链接,它可能会有所帮助。 http://www.javaroots.com/2015/04/asynchronous-file-uploads-in-rails.html#disqus_thread