Per qualche motivo usare la gemma CarrierWave con Ajax non sembra funzionare per me. Sto facendo qualcosa di sbagliato? Ho seguito bene il 253 CarrierWave Railscast e funziona senza AJAX, ma nella mia applicazione ho bisogno di usare AJAX. Qui è il mio codice:Il gioiello Ruby on Rails CarrierWave funziona con Ajax?
L'elenco params dopo aver selezionato un jpeg nel campo file di immagine:
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
Ho la gemma carrierwave nel mio Gemfile e non ho cambiato nulla nella cartella app/uploader/image_uploader.rb.
Grazie per tutto il vostro aiuto!
Allora mi dai la mia taglia? – TheDelChop
Come indicato nell'altra risposta di seguito, a meno che non sia necessario supportare i browser meno recenti [XHR2] (http://caniuse.com/#feat=xhr2) ha supportato 'FormData' per un po 'di tempo. Vale la pena provarlo se è disponibile per te e se torni solo ad altre librerie per il supporto legacy. – mczepiel
A questo punto questa risposta è obsoleta. HTML5 ha le API FormData e File che consentono il caricamento di file tramite AJAX. Vedi [qui] (http://stackoverflow.com/questions/166221/how-can-i-upload-files-asynchronous/8758614#8758614) per ulteriori informazioni. –