[RUBY] [Rails] Comment télécharger plusieurs images à l'aide de Carrierwave

Cible

ezgif.com-video-to-gif.gif

Environnement de développement

・ Rubis: 2.5.7 Rails: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Système d'exploitation: macOS Catalina

supposition

Ce qui suit a été mis en œuvre.

Présentation mince

la mise en oeuvre

1. Présentez Gem

Gemfile


gem 'carrierwave'
gem 'mini_magick'

gem 'mini_magick' ➡︎ Vous permet de modifier la taille de l'image lors du téléchargement.

Terminal


$ bundle

2. Créez un fichier de paramètres d'image

Terminal


$ rails g uploader image

ʻLe fichier suivant est créé dans app / uploaders / image_uploader.rb`. La méthode de réglage sera expliquée plus tard.

uploaders/image_uploader.rb


class ImageUploader < CarrierWave::Uploader::Base
  # Include RMagick or MiniMagick support:
  # include CarrierWave::RMagick
  # include CarrierWave::MiniMagick

  # Choose what kind of storage to use for this uploader:
  storage :file
  # storage :fog

  # Override the directory where uploaded files will be stored.
  # This is a sensible default for uploaders that are meant to be mounted:
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  # Provide a default URL as a default if there hasn't been a file uploaded:
  # def default_url(*args)
  #   # For Rails 3.1+ asset pipeline compatibility:
  #   # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png "].compact.join('_'))
  #
  #   "/images/fallback/" + [version_name, "default.png "].compact.join('_')
  # end

  # Process files as they are uploaded:
  # process scale: [200, 300]
  #
  # def scale(width, height)
  #   # do something
  # end

  # Create different versions of your uploaded files:
  # version :thumb do
  #   process resize_to_fit: [50, 50]
  # end

  # Add a white list of extensions which are allowed to be uploaded.
  # For images you might use something like this:
  # def extension_whitelist
  #   %w(jpg jpeg gif png)
  # end

  # Override the filename of the uploaded files:
  # Avoid using model.id or version_name here, see uploader/store.rb for details.
  # def filename
  #   "something.jpg " if original_filename
  # end
end

3. Ajouter une colonne

Terminal


$ rails g migration AddImagesToBooks images:json

Terminal


$ rails db:migrate

schema.rb


create_table "books", force: :cascade do |t|
  t.integer "user_id"
  t.string "title"
  t.text "body"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
  t.json "images"
end

4. Modifiez le modèle

book.rb


#Postscript
mount_uploaders :images, ImageUploader

5. Modifiez le contrôleur

Ajoutez {images []} au paramètre strong afin qu'il puisse être enregistré sous forme de tableau dans la colonne.

books_controller.rb


def book_params
  params.require(:book).permit(:title, :body, { images: [] })
end

6. Modifier la vue

** ① Créez un formulaire de soumission d'images **

En ajoutant multiple: true, vous pouvez sélectionner plusieurs images.

slim:books/~.html.slim


= f.file_field :images, multiple: true
br

** ② Afficher l'image **

Arrangez la colonne ʻimages avec "5. Editez le contrôleur", et comme il y a plusieurs images dedans, tournez-la avec ʻeach pour la retirer.

** * L'image ne sera pas affichée à moins que .to_s ne soit ajouté. ** **

books/~html.slim


td
  - book.images.each do |image|
    = image_tag image.to_s

À propos des paramètres

1. Réglage de la taille de l'image

ʻInclude CarrierWave :: MiniMagick` est ajouté, et le réglage de la taille est décrit ci-dessous.

** ① process resize_to_fill ** (recommandé) Recadrer à partir de la position spécifiée («Centre») à la taille spécifiée (100, 100) à partir de l'image d'origine sans conserver le rapport hauteur / largeur.

uploaders/image_uploader.rb


class ImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick
  process resize_to_fill: [100, 100, 'Center']
end

スクリーンショット 2020-06-06 9.59.35.png

process resize_to_fit Vous pouvez redimensionner la largeur jusqu'à 300px et la hauteur jusqu'à 200px tout en conservant le rapport hauteur / largeur.

uploaders/image_uploader.rb


class ImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick
  process resize_to_fit: [100, 100]
end

スクリーンショット 2020-06-06 10.00.23.png

2. Restrictions d'extension

Décommentez les lignes 38-40 de ʻimage_uploader.rb`. Par défaut, les téléchargements ne peuvent pas être effectués si l'extension est autre que jpg, jpeg, gif ou png.

uploaders/image_uploader.rb


class ImageUploader < CarrierWave::Uploader::Base
  def extension_whitelist
    %w(jpg jpeg gif png)
  end
end

Recommended Posts

[Rails] Comment télécharger plusieurs images à l'aide de Carrierwave
[Rails] Comment télécharger des images à l'aide de Carrierwave
[Rails] Comment télécharger des images sur AWS S3 à l'aide de Carrierwave et de fog-aws
CarrierWave Télécharger plusieurs images
[Rails] Comment télécharger des images sur AWS S3 à l'aide de refile et refile-s3
Téléchargez facilement plusieurs images avec rails rails + carrierwave + cloudinary
[rails] Comment publier des images
[Rails] Enregistrez des images à l'aide de carrierwave
Comment télécharger des images depuis AWS S3 (rails, carrierwave)
Pour implémenter la publication d'images à l'aide de rails
[rails6.0.0] Comment enregistrer des images en utilisant Active Storage au format assistant
Comment écrire des rails
Comment mettre en œuvre un diaporama en utilisant Slick in Rails (un par un et plusieurs par un)
[Rails] Comment créer un graphique à l'aide de lazy_high_charts
Comment désinstaller Rails
Comment lier des images à l'aide de FactoryBot Active Storage
[Ruby on Rails] Téléversement de plusieurs images avec refile
[Rails 6] Deux méthodes pour saisir plusieurs images à la fois à l'aide de CarrierWave / (1) Saisie avec les données de départ initiales / (2) Importer avec CSV
Comment gérer les images téléchargées
[Rails] Comment utiliser enum
Comment réduire les images Java
[Rails] Comment utiliser enum
Comment lire les itinéraires des rails
Comment utiliser la jonction de rails
Comment terminer le serveur de rails
Comment écrire des graines de Rails
[Rails] Comment utiliser la validation
[Rails] Comment désactiver les turbolinks
[Rails] Comment utiliser authenticate_user!
[Rails] Comment mettre en œuvre le scraping
[Rails] Comment faire des graines
Comment écrire le routage Rails
[Rails] Comment installer simple_calendar
[Rails] Comment installer reCAPTCHA
[Rails] Comment utiliser Scope
Comment autoriser à l'aide de graphql-ruby
Comment implémenter une image de profil circulaire avec CarrierWave et R Magick in Rails
Comment tester avec des images lors de l'utilisation d'ActiveStorage et de Faker
Comment définir des variables d'environnement lors de l'utilisation de Payjp avec Rails
[Rails API + Vue] Télécharger et afficher des images à l'aide du stockage actif
Empêcher les opérations! Méthode de mise à jour manuelle sûre des données pour Rails utilisant des transactions
Comment définir et décrire des variables d'environnement à l'aide de Rails zsh
Comment déployer jQuery dans les applications Rails à l'aide de Webpacker
[Rails] Comment utiliser la "devise" des gemmes
[Rails] Comment utiliser les messages flash
[rails] Comment afficher les informations de base de données