Om vi bygger en webbapplikation är en av funktionerna vi definitivt vill ha bilduppladdningsfunktionen. Faktum är att uppladdning av bilder är en viktig funktion som dagens applikationer helt enkelt inte kan föreställas utan. Och inte bara det, det är ännu viktigare med tanke på att uppladdning av bilder också spelar en roll för sökmotoroptimering. CarrierWave gem kan integreras med våra Rails-applikationer och det ger ett enkelt och extremt flexibelt sätt att ladda upp filer.
Rails Application Setup:
För att ställa in detta i vår Rails-applikation, efter att ha skapat ett nytt projekt, måste vi lägga till 2 ädelstenar i ädelstensfilen. Den första är CarrierWave själv, och den andra är bootstrap-sass pärla (tillval).gem 'carrierwave', '~> 0.9'
gem 'bootstrap-sass', '~> 2.3.2'
Installation:
Vi kör buntinstallation och skapar sedan våra modeller och kontroller för vår applikation. paketinstallationrails g modell Modellnamn field:datatype =>attachment:string
rake db:migrera
rails g controller controllername action => index new create destroy Nu måste vi skapa en uppladdare. Uppladdarna berättar för carrierwave hur de ska hantera filen när den väl har laddats upp => rails g uploader attachment Det kommer att skapa en mapp som heter uploaders i appmappen med filen attachment_uploader.rb.
Så här spelar du med det:
app/uploaders/attachment_uploader.rbclass Attachment Uploader < CarrierWave::Uploader::Bas storage :file def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end end
Nu i vår CV-kontroller och lägg till lite kod för att hantera formulärbearbetning:
class ResumesController < ApplicationController def index @resumes = Resume.all end def new @resume = Resume.new end def create @resume = Resume.new(resume_params) om @resume.save redirect_to resumes_path, notera: "The resume 1TPe5T{@resume .name} har laddats upp." else render "new" end end def destroy @resume = Resume.find(params[:id]) @resume.destroy redirect_to resumes_path, notera: "CV #{@resume.name} har tagits bort." end private def resume_params params.require(:resume).permit(:name, :attachment) end end
Nu måste vi ställa in våra vyfiler:
För new.html.erb
<%= form_for @resume, html: { multipart: true } do |f| %> <%= f.label :name %> <%= f.text_field :name %> <%= f.label :attachment %> <%= f.file_field :attachment %> <%ave=SAVE f. ”, klass: “btn btn-primary” %> <% end %>
För index.html.erb
<% @resumes.each do |resume| %> <% slutet %>
namn | Nedladdningslänk | |
---|---|---|
<%= resume.name %> | <%= link_to “Ladda ner CV”, resume.attachment_url %> | <%= button_to "Radera", återuppta, metod: :delete, class: "", bekräfta: "Är du säker på att du vill ta bort #{resume.name}?" %> |
app/uploaders/attachment_uploader.rb
class AttachmentUploader < CarrierWave::Uploader::Baslagring :file def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end def extension_white_list %w(pdf html doc htm docx) slutet slut
Referenser:
Github: https://github.com/carrierwaveuploader/carrierwave RubyGems: https://rubygems.org/gems/carrierwave/versions/0.11.2 Railscasts: http://railscasts.com/episodes/253-carrierwave-file-uploadsPrenumerera för de senaste uppdateringarna
relaterade inlägg