Se stiamo creando un'applicazione web, una delle funzionalità che vorremmo sicuramente è la funzione di caricamento delle immagini. In effetti, il caricamento delle immagini è una caratteristica importante senza la quale le applicazioni moderne non possono semplicemente essere immaginate. E non solo, è ancora più importante considerando il fatto che anche il caricamento delle immagini gioca un ruolo nell’ottimizzazione dei motori di ricerca. CarrierWave gem può essere integrato con le nostre applicazioni Rails e fornisce un modo semplice ed estremamente flessibile per caricare file.
Configurazione dell'applicazione Rails:
Per configurarlo nella nostra applicazione Rails, dopo aver creato un nuovo progetto, dobbiamo aggiungere 2 gemme nel file gem. Il primo è lo stesso CarrierWave e il secondo è la gemma bootstrap-sass (opzionale).gemma 'onda portante', '~> 0.9'
gemma 'bootstrap-sass', '~> 2.3.2'
Installazione:
Eseguiamo l'installazione in bundle e quindi creiamo i nostri modelli e controller per la nostra applicazione. installazione del pacchettorails g model Nome modello campo:tipodati =>allegato:stringa
rake db:migrare
rails g controller controllername action => indice new create destroy Ora dobbiamo creare un uploader. Gli uploader dicono a carrierwave come gestire il file una volta caricato => rails g uploader attach Creerà una cartella denominata uploaders nella cartella dell'app con un file attach_uploader.rb.
Come ci giochi:
app/uploaders/attachment_uploader.rbclass Caricatore allegati < CarrierWave::Uploader::Base storage :file def store_dir "uploads/#{model.class.to_s.underscore}/#{montato_as}/#{model.id}" end end
Ora nel nostro controller dei curriculum e aggiungi del codice per gestire l'elaborazione del modulo:
class ResumesController < ApplicationController def indice @resumes = Resume.all end def new @resume = Resume.new end def create @resume = Resume.new(resume_params) if @resume.save reindirizzamento_to curriculums_path, nota: "Il curriculum #{@resume .name} è stato caricato." else render "new" end end def destroy @resume = Resume.find(params[:id]) @resume.destroy reindirizza_to curriculums_path, nota: "Il curriculum #{@resume.name} è stato eliminato." end private def curriculum_params params.require(:resume).permit(:name, :attachment) end end
Ora dobbiamo impostare i nostri file di visualizzazione:
Per new.html.erb
<%= form_for @resume, html: { multipart: true } do |f| %> <%= f.etichetta :nome %> <%= f.campo_testo :nome %> <%= f.etichetta :allegato %> <%= f.campo_file :allegato %> <%= f.submit “Salva ”, classe: “btn btn-primary” %> <% end %>
Per index.html.erb
<% @resumes.each fa |resume| %> <% fine %>
Nome | Link per scaricare | |
---|---|---|
<%= curriculum.nome %> | <%= link_a “Scarica curriculum”, curriculum.allegato_url %> | <%= button_to “Elimina”, curriculum, metodo: :delete, classe: “”, conferma: “Sei sicuro di voler eliminare #{resume.name}?” %> |
app/uploaders/attachment_uploader.rb
class AnnexUploader < CarrierWave::Uploader::Base storage :file def store_dir "uploads/#{model.class.to_s.underscore}/#{montato_as}/#{model.id}" end def extension_white_list %w(pdf doc htm html docx) fine fine
Riferimenti:
Github: https://github.com/carrierwaveuploader/carrierwave Gemme di rubino: https://rubygems.org/gems/carrierwave/versions/0.11.2 Railcast: http://railscasts.com/episodes/253-carrierwave-file-uploadsIscriviti per gli ultimi aggiornamenti
Articoli correlati