[RUBY] CarrierWave Upload multiple images

Premise

With column image: string for carrierwave

teminal


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

Implementation

Gem installation

Gemfile


gem 'carrierwave'

terminal


$ bundle install

CarrierWave uploader creation

terminal


$ rails g uploader image

The following files are created in app / uploaders / image_uploader.rb.

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

Link with the Image Uploader created earlier in the Post model.

post.rb


  #add to
  mount_uploaders :image, ImageUploader
  serialize :image, JSON

Editing controller

Allow multiple file upload attributes for strong parameters

posts_controller.rb


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

edit view

Allows you to select multiple sheets.

ruby:new.html.erb


 #Additional multiple: true
 <%= f.file_field :image, multiple: true %>

Finally, make it possible to display multiple images.

ruby:index.html.erb


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

Recommended Posts

CarrierWave Upload multiple images
Upload multiple images easily with rails rails + carrierwave + cloudinary
[Rails] How to upload multiple images using Carrierwave
[Rails] How to upload images using Carrierwave
Multiple image upload function using Rails Carrierwave
[Ruby on Rails] Upload multiple images with refile
[Rails] Save images using carrierwave
Save and display multiple images
[Java] Upload images and base64
Image upload using CarrierWave ~ Rspec test ~
upload images to refile heroku S3
[Rails] How to upload images to AWS S3 using Carrierwave and fog-aws
Upload multiple images to Cloudinary on Active Storage and publish to Heroku
Post / delete multiple images with Active Storage