Gem Carrierwave pour les téléchargements de fichiers dans Rails

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 install
rails 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.rb
classe 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-uploads

Abonnez-vous pour les dernières mises à jour

Articles Similaires

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

fr_FRFrench