[RUBY] CarrierWave Laden Sie mehrere Bilder hoch

Annahme

Mit Spaltenbild: Zeichenfolge für Trägerwelle

teminal


$ rails g model Post title:string body:text image:string
$ rails db:migrate

Implementierung

Edelsteininstallation

Gemfile


gem 'carrierwave'

terminal


$ bundle install

CarrierWave-Uploader-Erstellung

terminal


$ rails g uploader image

Die folgenden Dateien werden in app / uploaders / image_uploader.rb erstellt.

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

Verknüpft mit dem Post-Modell mit dem zuvor erstellten Image Uploader.

post.rb


  #hinzufügen
  mount_uploaders :image, ImageUploader
  serialize :image, JSON

Controller bearbeiten

Ermöglichen Sie starken Parametern, mehrere Dateien hochzuladen

posts_controller.rb


  def post_params
    params.require(:post).permit(:title, :body, { image: [] })
  end

Ansicht bearbeiten

Ermöglicht die Auswahl mehrerer Blätter.

ruby:new.html.erb


 #Zusätzliches Vielfaches: true
 <%= f.file_field :image, multiple: true %>

Ermöglichen Sie schließlich die Anzeige mehrerer Bilder.

ruby:index.html.erb


 <% @post.image.each do |image| %>
   <%= image_tag(image.url) %>
 <% end %>

Recommended Posts

CarrierWave Laden Sie mehrere Bilder hoch
Laden Sie einfach mehrere Bilder mit Rails Rails + Carrierwave + Cloudinary hoch
[Rails] So laden Sie mehrere Bilder mit Carrierwave hoch
[Rails] So laden Sie Bilder mit Carrierwave hoch
[Ruby on Rails] Hochladen mehrerer Bilder mit Refile
[Schienen] Speichern Sie Bilder mit Carrierwave
Speichern und zeigen Sie mehrere Bilder an
[Java] Laden Sie ein Bild hoch und konvertieren Sie es in Base64
Bild-Upload mit CarrierWave ~ Rspec-Test ~
Bild hochladen, um Heroku S3 nachzufüllen
[Rails] So laden Sie Bilder mit Carrierwave und Fog-Aws in AWS S3 hoch
Veröffentlichen / Löschen mehrerer Bilder mit Active Storage