Para transformar um esquema de upload normal para AJAX usando jQuery, para upload de multiplos arquivos por vez, primeiro crie o formulario e a classe do CarrierWave. Depois modifique o formulario:
<%= form_for Painting.new do |f| %>
<%= f.label :image, "Upload image:" %>
<%= f.file_field :image, multiple: true, name: "painting[image]" %>
<% end %>
Depois adicione o gem no Gemfile
:
group :assets do
gem 'jquery-fileupload-rails'
end
Depois no arquivo javascript app/assets/javascripts/application.js
, adicione a linha depois do jQuery:
//= require jquery-fileupload/basic
No arquivo javascript do modelo, exemplo app/assets/javascripts/painting.js.coffe
jQuery ->
$('#new_image').fileupload()
dataType "script"
No controlador app/controllers/paintings_controller.rb
, modifique a ação create para devolver um arquivo javascript.
def create
@painting = Painting.create(params[:painting])
end
Agora crie o arquivo app/views/paintings/create.js.erb
.
<% if @painting.new_record? %>
alert("Failed to upload painting: <%= j @painting.errors.full_messages.join(', ').html_safe %>");
<% else %>
$("#paintings").append("<%= j render(@painting) %>");
<% end %>
No modelo dos paintibgs app/models/painting.rb
before_create :default_name
def default_name
self.name ||= File.basename(image.filename, '.*').titleize if image
end
Isso ira criar um nome default para os paintings criados.