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

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

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

Parameters: {"item"=>{"remote_image_url"=>""}} 

new.html.erb:

  create_item_path, :html => {:id => "create_item_form", :multipart => true}) do |f| %> 


"save_button" %>

的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; }); 

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 

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 

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

感谢你的帮助!

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

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

使用JQuery上传器的Rails载波

希望这可以帮助,

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

参见: LINK 1 & LINK 2

你不能通过像这样的Ajax上传文件。 你需要这样的东西: http : //www.uploadify.com/