[RUBY] [Rails] So laden Sie mehrere Bilder mit Carrierwave hoch

Ziel

ezgif.com-video-to-gif.gif

Entwicklungsumgebung

・ Ruby: 2.5.7 Schienen: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Betriebssystem: macOS Catalina

Annahme

Folgendes wurde implementiert.

Schlanke Einführung

Implementierung

1. Stellen Sie Gem vor

Gemfile


gem 'carrierwave'
gem 'mini_magick'

gem 'mini_magick' ➡︎ Ermöglicht das Ändern der Bildgröße beim Hochladen.

Terminal


$ bundle

2. Erstellen Sie eine Bildeinstellungsdatei

Terminal


$ rails g uploader image

Die folgenden Dateien werden in app / uploaders / image_uploader.rb erstellt. Die Einstellmethode wird später erklärt.

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. Spalte hinzufügen

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. Bearbeiten Sie das Modell

book.rb


#Nachtrag
mount_uploaders :images, ImageUploader

5. Bearbeiten Sie den Controller

Fügen Sie dem starken Parameter {images []} hinzu, damit er als Array in der Spalte gespeichert werden kann.

books_controller.rb


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

6. Ansicht bearbeiten

** ① Erstellen Sie ein Bildübermittlungsformular **

Durch Hinzufügen von "multiple: true" können Sie mehrere Bilder auswählen.

slim:books/~.html.slim


= f.file_field :images, multiple: true
br

** ② Bild anzeigen **

Ordnen Sie die Spalte "Bilder" in "5. Bearbeiten Sie den Controller" an. Da sich mehrere Bilder darin befinden, drehen Sie sie mit "Jeder", um sie zu extrahieren.

** * Das Bild wird nur angezeigt, wenn .to_s hinzugefügt wurde. ** ** **

books/~html.slim


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

Über Einstellungen

1. Einstellung der Bildgröße

Fügen Sie "include CarrierWave :: MiniMagick" hinzu und beschreiben Sie die Größeneinstellung darunter.

** ① process resize_to_fill ** (empfohlen) Zuschneiden von der angegebenen Position ('Mitte') in der angegebenen Größe (100, 100) aus dem Originalbild, ohne das Seitenverhältnis beizubehalten.

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 Sie können das Seitenverhältnis beibehalten und die Breite auf bis zu 300 Pixel und die Höhe auf bis zu 200 Pixel ändern.

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. Erweiterungsbeschränkungen

Kommentieren Sie die Zeilen 38-40 von image_uploader.rb aus. Standardmäßig können keine Uploads durchgeführt werden, wenn die Erweiterung nicht jpg, jpeg, gif oder png ist.

uploaders/image_uploader.rb


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

Recommended Posts

[Rails] So laden Sie mehrere Bilder mit Carrierwave hoch
[Rails] So laden Sie Bilder mit Carrierwave hoch
[Rails] So laden Sie Bilder mit Carrierwave und Fog-Aws in AWS S3 hoch
CarrierWave Laden Sie mehrere Bilder hoch
[Rails] So laden Sie Bilder mit refile und refile-s3 in AWS S3 hoch
Laden Sie einfach mehrere Bilder mit Rails Rails + Carrierwave + Cloudinary hoch
[Schienen] Wie poste ich Bilder?
[Schienen] Speichern Sie Bilder mit Carrierwave
So laden Sie Bilder von AWS S3 herunter (Rails, Carrierwave)
So implementieren Sie die Image-Veröffentlichung mithilfe von Schienen
[rails6.0.0] Speichern von Bildern mit Active Storage im Assistentenformat
Wie schreibe ich Rails
So implementieren Sie eine Diashow mit Slick in Rails (einzeln und mehrfach nacheinander)
[Rails] So erstellen Sie ein Diagramm mit lazy_high_charts
So deinstallieren Sie Rails
So verknüpfen Sie Bilder mit FactoryBot Active Storage
[Ruby on Rails] Hochladen mehrerer Bilder mit Refile
[Rails 6] Zwei Methoden zur gleichzeitigen Eingabe mehrerer Bilder mit CarrierWave / (1) Eingabe mit anfänglichen Startdaten / (2) Import mit CSV
Umgang mit hochgeladenen Bildern
[Rails] Verwendung von Enum
So minimieren Sie Java-Images
[Rails] Verwendung von Enum
Wie man Schienenrouten liest
Verwendung von Rails Join
So beenden Sie den Rails-Server
Wie schreibe ich Rails Seed
[Rails] Verwendung der Validierung
[Schienen] So deaktivieren Sie Turbolinks
[Rails] So verwenden Sie authenticate_user!
[Rails] So implementieren Sie Scraping
[Schienen] Wie man Samen macht
Wie schreibe ich Rails Routing
[Rails] So installieren Sie simple_calendar
[Rails] So installieren Sie reCAPTCHA
[Schienen] Verwendung von Scope
So autorisieren Sie mit graphql-ruby
So implementieren Sie ein kreisförmiges Profilbild mit CarrierWave und R Magick in Rails
Testen des Einschlusses von Bildern bei Verwendung von ActiveStorage und Faker
Festlegen von Umgebungsvariablen bei Verwendung von Payjp mit Rails
[Rails API + Vue] Laden Sie Bilder mit Active Storage hoch und zeigen Sie sie an
Verhindern Sie Vorgänge! Sichere manuelle Datenaktualisierungsmethode für Rails mithilfe von Transaktionen
Festlegen und Beschreiben von Umgebungsvariablen mit Rails zsh
So stellen Sie jQuery in Rails-Apps mit Webpacker bereit
[Rails] Wie man Edelstein "devise" benutzt
[Rails] Verwendung von Flash-Nachrichten
[Rails] Anzeigen von Datenbankinformationen