Wenn wir eine Webanwendung erstellen, ist eine der Funktionen, die wir uns auf jeden Fall wünschen würden, die Funktion zum Hochladen von Bildern. Tatsächlich ist das Hochladen von Bildern eine wichtige Funktion, die aus modernen Anwendungen nicht mehr wegzudenken ist. Und nicht nur das, es ist umso wichtiger, wenn man bedenkt, dass das Hochladen von Bildern auch eine Rolle bei der Suchmaschinenoptimierung spielt. CarrierWave gem kann in unsere Rails-Anwendungen integriert werden und bietet eine einfache und äußerst flexible Möglichkeit, Dateien hochzuladen.
Einrichtung der Rails-Anwendung:
Um dies in unserer Rails-Anwendung einzurichten, müssen wir nach dem Erstellen eines neuen Projekts zwei Gems zur Gem-Datei hinzufügen. Das erste ist CarrierWave selbst und das zweite ist das Bootstrap-Sass-Juwel (optional).gem 'carrierwave', '~> 0.9'
gem 'bootstrap-sass', '~> 2.3.2'
Installation:
Wir führen die Bundle-Installation aus und erstellen dann unsere Modelle und Controller für unsere Anwendung. Bundle-InstallationSchienen G-Modell Modellname Feld:Datentyp =>Anhang:Zeichenfolge
rake db:migrieren
rails g controller controllername action => index new create destroy
Now, we need to create an uploader. The uploaders tell carrierwave how to handle the file once it’s uploaded
=> rails g uploader attachment
It will create a folder named uploaders in the app folder with a file attachment_uploader.rb.
So spielt man damit:
app/uploaders/attachment_uploader.rbclass Attachment Uploader < CarrierWave::Uploader::Base storage :file def store_dir "uploads/#{model.class.to_s.underscore}/#{montiert_as}/#{model.id}" Ende Ende
Fügen Sie nun in unserem Lebenslauf-Controller etwas Code für die Formularverarbeitung hinzu:
class ResumesController < ApplicationController def index @resumes = Resume.all end def new @resume = Resume.new end def create @resume = Resume.new(resume_params) if @resume.save weitergeleitet_zu resumes_path, Hinweis: „Der Lebenslauf #{@resume .name} wurde hochgeladen.“ else render „new“ end end def destroy @resume = Resume.find(params[:id]) @resume.destroy restart_to resumes_path, Hinweis: „Der Lebenslauf #{@resume.name} wurde gelöscht.“ end private def resume_params params.require(:resume).permit(:name, :attachment) end end
Jetzt müssen wir unsere Ansichtsdateien einrichten:
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 %> <%= f.submit “Save”, class: “btn btn-primary” %> <% end %>
Für index.html.erb
<% @resumes.each macht |resume| %> <% Ende %>
Name | Download-Link | |
---|---|---|
<%= Lebenslauf.Name %> | <%= link_to “Download Resume”, resume.attachment_url %> | <%= button_to “Delete”, resume, method: :delete, class: “”, confirm: “Are you sure that you want to delete #{resume.name}?” %> |
app/uploaders/attachment_uploader.rb
class AttachmentUploader < CarrierWave::Uploader::Base storage :file def store_dir "uploads/#{model.class.to_s.underscore}/#{montiert_as}/#{model.id}" end def extension_white_list %w(pdf doc htm html docx) Ende Ende
Verweise:
Github: https://github.com/carrierwaveuploader/carrierwave RubyGems: https://rubygems.org/gems/carrierwave/versions/0.11.2 Railcasts: http://railscasts.com/episodes/253-carrierwave-file-uploadsAbonnieren Sie die neuesten Updates
zusammenhängende Posts