Si nous construisons une application web, l'une des fonctionnalités que nous voulons absolument est le téléchargement d'images. En effet, le téléchargement d'images est une fonctionnalité importante dont les applications modernes ne peuvent tout simplement pas se passer. Et ce n'est pas tout, c'est encore plus important si l'on considère que le téléchargement d'images joue également un rôle dans l'optimisation des moteurs de recherche.
CarrierWave gem peut être intégré à nos applications Rails et fournit un moyen simple et extrêmement flexible de télécharger des fichiers.
Configuration de l'application Rails :
Pour mettre cela en place dans notre application Rails, après avoir créé un nouveau projet, nous devons ajouter 2 gemmes dans le fichier gem. La première est CarrierWave lui-même, et la seconde est la gem bootstrap-sass (optionnelle).gem 'carrierwave', '~> 0.9'
gem 'bootstrap-sass', '~> 2.3.2'
Installation:
Nous lançons bundle install et créons ensuite nos modèles et contrôleurs pour notre application. bundle installrails g model Modelname field:datatype =>attachment:string
rake db: migrer
rails g controller controllername action => index new create destroy
Maintenant, nous devons créer un uploader. Les uploaders indiquent à carrierwave comment gérer le fichier une fois qu'il est téléchargé
=> rails g uploader attachment
Cela va créer un dossier nommé uploaders dans le dossier de l'application avec un fichier attachment_uploader.rb.
Comment jouer avec :
app/uploaders/attachment_uploader.rbclasse Attachment Uploader < CarrierWave::Uploader::Base
stockage :fichier
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
Maintenant, dans notre contrôleur de CV, ajoutez du code pour gérer le traitement du formulaire :
classe ResumesController < ApplicationController
def index
@resumes = Resume.all
end
def new
@resume = Resume.new
end
def create
@resume = Resume.new(resume_params)
if @resume.save
redirect_to resumes_path, notice : "Le CV #{@resume.name} a été téléchargé".
else
rendez "nouveau"
end
fin
def destroy
@resume = Resume.find(params[:id])
@resume.destroy
redirect_to resumes_path, notice : "Le CV #{@resume.name} a été supprimé".
end
private
def resume_params
params.require(:resume).permit(:name, :attachment)
end
end
Nous devons maintenant configurer nos fichiers de vue :
Pour 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 %>
Pour index.html.erb
Nom | Lien de téléchargement | |
---|---|---|
<%= resume.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
stockage :fichier
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
def extension_white_list
%w(pdf doc htm html docx)
end
fin
Les références:
GitHub : https://github.com/carrierwaveuploader/carrierwave RubyGemmes : https://rubygems.org/gems/carrierwave/versions/0.11.2 Diffusions sur rail : http://railscasts.com/episodes/253-carrierwave-file-uploadsAbonnez-vous pour les dernières mises à jour
Articles Similaires