Мультиблог на Ruby on Rails. Работа с изображениями. Урок 11.

Чтобы наш блог выглядел более живым и красочным, давайте добавим возможность прикреплять к каждой статье блога свою картинку. Для работы с изображением в Ruby есть библиотека carrierwave, поэтому давайте добавим её в Gemfile:

gem 'carrierwave'

и произведём установку через команду bundle i

Далее создадим загрузчик изображения:

rails g uploader Image

В результате этого действия будет создан загрузчик по адресу /app/uploaders/image_uploader.rb

Дальше добавляем инициализацию этого аплоадера в модель Post:

mount_uploader :image, ImageUploader

Теперь нужно создать поле для загрузки изображения в самой форме:

<div class="form-group">
  <%= form.file_field :image %>
</div>

И не забываем добавить поле image в список разрешённых, для создания объекта из полей формы. Делается это напомню, в функции post_params, о предназначении которой я рассказывал в уроке по "Созданию новой статьи пользователем" (кстати, обратите внимание, что поле image у нас уже было создано ещё при проектировании самой таблички с постами; в противном случае необходимо было бы создать миграцию на его добавление).

params.require(:post).permit(:title, :body, :image)

Собственно теперь можно отредактировать запись и попробовать добавить картинку. Чтобы убедиться в том, загрузилось ли изображение или нет, достаточно проверить папку public/uploads на наличие вашей картинки. 

Вывод картинки в шаблоне View

В принципе, нам уже сейчас ничего не стоит, в файле show.html.erb чуть выше body, вывести картинку вот так:

<%= image_tag @post.image.url, style: 'width: 100%' %>

Однако у нас в шаблоне, место под картинку отведено в шапке и мы, ещё на этапе создания базового шаблона, уже обозначили для неё секцию image. И теперь всё, что остаётся, это перезаписать её в самом файле show.html.erb:

<% content_for :image do %><%= @post.image.url %><% end %>

Здесь мы хэлпер image_tag уже не используем, так как картинка выводится через CSS свойство. 

Вот таким нехитрым образом мы реализовали добавление картинки. Изменения данного урока, как и всегда, в коммите