Ruby on Rails CarrierWave gem是否可以与Ajax一起使用?

Eve*_*ner 12 ajax jquery ruby-on-rails carrierwave

出于某些原因,使用带有Ajax的CarrierWave gem似乎并不适合我.难道我做错了什么?我很好地遵循了253 CarrierWave Railscast,它在没有AJAX的情况下工作,但在我的应用程序中我需要使用AJAX.这是我的代码:

在图像文件字段中选择jpeg后的参数列表:

Parameters: {"item"=>{"remote_image_url"=>""}}
Run Code Online (Sandbox Code Playgroud)

new.html.erb:

<%= form_for(@item, :url => create_item_path, :html => {:id => "create_item_form", :multipart => true}) do |f| %>
    <p>
      <%= f.file_field :image %>
    </p>
    <p>
      <%= f.label :remote_image_url, "or image URL" %><br />
      <%= f.text_field :remote_image_url %>
    </p>
    <%= f.submit "Save", :id => "save_button" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

的application.js

$("#create_item_form").submit(function() {
    $.ajax({
      type: "POST",
      url: $(this).attr("action"),
      dataType: "script",
      data:  $("#destination_item").sortable('serialize') + "&" + $(this).serialize()
      });
      return false;
});
Run Code Online (Sandbox Code Playgroud)

item.rb的

class Item < ActiveRecord::Base
  attr_accessible :description, :image, :remote_image_url
  belongs_to :user
  has_many :item_sub
  mount_uploader :image, ImageUploader
end
Run Code Online (Sandbox Code Playgroud)

schema.rb

  create_table "item", :force => true do |t|
    t.integer  "user_id"
    t.string   "title"
    t.string   "image"
    t.datetime "created_at"
    t.datetime "updated_at"
  end
Run Code Online (Sandbox Code Playgroud)

我在gemfile中有了carrierwave gem,而且我没有更改app/uploaders/image_uploader.rb中的任何内容.

感谢你的帮助!

The*_*hop 14

没有使用像Uploadify这样的库,没有什么可以做的.这是因为XMLHttpRequest(AJAX)标准不支持文件上载.你可以真正假装这个的唯一方法是使用带有Flash的iFrame.Uploadify是这些选项中最好的,它拥有最好的文档.这是必须在客户端(浏览器)完成的.Uploadify真的不是一个ruby gem,它是flash和js的集合,允许浏览器"伪造它".

在服务器端,您可以使用carrierwave来支持上传,但您需要一种方法从客户端获取它们.这是一个非常相似的问题,应该为您提供所需的说明.

使用JQuery上传器的Rails载波

希望这可以帮助,

  • 此时这个答案已经过时了.HTML5具有FormData和File API,允许通过AJAX上传文件.有关更多信息,请参见[此处](http://stackoverflow.com/questions/166221/how-can-i-upload-files-asynchronously/8758614#8758614). (3认同)
  • 那你愿意给我赏金吗? (2认同)

Dar*_*bar 8

您现在可以使用FormData()通过ajax上传文件而无需使用外部库

请参阅:链接1链接2