Требуется установленный ImageMagick:

sudo apt-get install imagemagick

Подключим гемы:

Добавить в Gemfile:

gem 'carrierwave', '~> 1.0'
gem "mini_magick"
bundle install

Генерация:

rails generate uploader Picture

Настройка конфигурации app/uploaders/picture_uploader.rb:

  • Раскомментировать строку:
include CarrierWave::MiniMagick
storage :file
  • Выбрать путь к файлам в store_dir

  • Можно настроить несколько версий для изображения в строке: version

version :large do
  process resize_to_fit: [1024, 1024]
end

version :title do
  process resize_to_fit: [600, 450]
end

version :thumb do
  process resize_to_fit: [300, 300]
end
  • Валидация формата файлов:
def extension_whitelist
  %w(jpg jpeg gif png)
end

Проведём миграцию, прикрепим изображение к нашим страницам

Предположим, что у нас есть сущность Project - инструкция, как создать сущность Project

rails g migration add_picture_to_projects picture:string
rake db:migrate

Пропишем в модели app/models/project.rb

class Project < ApplicationRecord
  mount_uploader :picture, PictureUploader
end

Добавим в форму (в /app/views/projects/_form.html.erb):

<%= form_for @project, html: { multipart: true } do |f| %>

и там же добавить:

<p>
  <%= f.label :picture, 'Загрузить картинку:' %><br />
  <%= f.file_field :picture %>
</p>

И, в контроллере /app/controllers/projects_controller.rb укажем разрешённый параметр :picture

def project_params
  params.require(:project).permit(:title, :body, :picture)
end

Ещё нам надо вывести картинку в show.html.erb

<p><%= image_tag @project.picture.url(:title), class: 'img-show', alt: @project.title if @project.picture? %></p>

<p><%= image_tag @project.picture.url(:thumb), class: 'img-show', alt: @project.title if @project.picture? %></p>

Можно добавить CSS:

.img-show {
  display: block;
  margin-bottom: 2rem;
}

Запустим rails s и откроем в браузере http://localhost:3000/projects/new, в форме появится кнопка загрузки фотографий.