Использует ли 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.
Спасибо за вашу помощь!
Ответы
Ответ 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/