Подтвердить что ты не робот

Использует ли Ruby on Rails CarrierWave gem работу с Ajax?

По какой-то причине использование драгоценного камня CarrierWave с Ajax, похоже, не работает для меня. Я делаю что-то неправильно? Я следил за 253 CarrierWave Railscast и работает без AJAX, но в моем приложении мне нужно использовать AJAX. Вот мой код:

Список параметров после выбора jpeg в поле файла изображения:

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

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 %>

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 есть несущая волна, и я ничего не изменил в приложении /uploaders/image _uploader.rb.

Спасибо за вашу помощь!

4b9b3361

Ответ 1

Нет ничего, что можно было бы сделать без использования библиотеки, такой как Uploadify. Это связано с тем, что стандарт XMLHttpRequest (AJAX) не поддерживает загрузку файлов. Единственный способ, которым вы действительно можете подделать это, - использовать iFrame с Flash. Uploadify - лучший из этих вариантов, и он имеет лучшую документацию. Это то, что нужно сделать на стороне клиента (браузер). Uploadify действительно не является рубиновым камнем, его коллекцией flash и js, чтобы браузер мог "подделать" его.

На стороне сервера вы можете использовать carrierwave для поддержки загрузок, но вам нужен способ получить их там с клиентской стороны. Вот очень похожий вопрос, который должен дать вам инструкции, которые вам нужны.

Rails Carrier Wave с загрузчиком JQuery

Надеюсь, что это поможет,

Джо

Ответ 2

Теперь вы можете загружать файлы через ajax без использования внешних библиотек, используя FormData()

СМ.: LINK 1 и LINK 2

Ответ 3

Вы не можете загрузить файл через ajax. Вам нужно что-то вроде: http://www.uploadify.com/