Integrating CarrierWave in my Rails Application

rails -v
gem install rails 6.0.3.4

Setting Up CarrierWave

*config/initializers/carrier_wave.rb*require 'carrierwave/orm/activerecord'
rails generate uploader Image
*app/uploaders/image_uploader.rb*# encoding: utf-8class 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
# # 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_white_list
# %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
...
include CarrierWave::MiniMagick
...
...
version :thumb do
process :resize_to_fill => [50, 50]
end
...
...
def extension_white_list
%w(jpg jpeg gif png)
end
...
*app/model/image.rb*
mount_uploader :image, ImageUploader

Validating Image Size

*app/model/image.rb
validates_processing_of :image
validate :image_size_validation
private
def image_size_validation
errors[:image] << "should be less than 500KB" if image.size >
0.5.megabytes

--

--

--

just a junior developer navigating through problems in Rails and React. I like sharing my solutions, thinking processes and sometimes frustration..

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

Who you gonna call (using RingCentral)??

Laravel Maintenance Mode

Twitter Sentiment Analysis with Twint and Textblob

Maybe you’re not as agile as you think

Agile Development

Snowball Weekly Newsletter — 30/12/2021

From line to 3D spiral

12 gifts for the security admin in your life

CREATE A RAILS APPLICATION + DEVISE AUTHENTICATION WITH DEPLOYED ON HEROKU

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Saman Batool

Saman Batool

just a junior developer navigating through problems in Rails and React. I like sharing my solutions, thinking processes and sometimes frustration..

More from Medium

Rails Project Reflection — A Ruby on Rails Recipe Manager

Let’s Start Rebuilding rails

Ensure only one record has specific value for another associated record | Rails 6.1.4

Scheduling tasks using the Whenever Gem — Ruby On Rails