はじめに
Rubyにおいて画像投稿機能を実装するために必要な流れを忘れないためにまとめます。
1. 画像投稿機能を実装するためには
rubyにおいて画像投稿を実装するために必要な流れは以下の通り。
ActiveStorageを用いて
- アップロードした画像専用のテーブルを作成する
- 投稿した画像を表示する
- 投稿した画像の大きさを調整する
2. ImageMagickをインストールする
% brew install imagemagick
-
ImageMagickとは
コマンドラインから画像に処理を加えることができるツール。
処理としては、画像の作成やサイズ変更、保存形式の変更などがある。
ImageMagickはGemではなく、ソフトウェア。
そのため、Homebrewからインストールする。
GemではないImageMagickをRubyやRailsで扱うには、MiniMagickというGemが必要となる。
3. MiniMagickとImageProcessingをインストール
# Gemfileの一番下に記述する
gem 'mini_magick'
gem 'image_processing', '~> 1.2'
# ターミナル上
% bundle install
-
MiniMagickとは
ImageMagickの機能をRubyで扱えるようにしてくれるGem。
RailsでImageMagickを扱うために必要となる。
MiniMagickによって、ImageMagickの機能がRailsで使用できるようになりますが、
画像サイズの変更には、もう1つImageProcessingというGemを追加する必要がある。
- ImageProcessingとは
MiniMagickでは提供できない、画像サイズを調整する機能を提供するGem。
4. ActiveStorageをインストール
# ターミナルにて
% rails active_storage:install
Active Storageに関連したマイグレーションが作成される。続けてマイグレートする必要がある。
% rails db:migrate
Sequel Proを確認し、データベース上に
「active_storage_attachments」
「active_storage_blobs」
の2テーブルができていれば、問題なし。
5. 画像の保存機能を実装する
行うことは以下の2つ。
- Active Storageのテーブルと保存するテーブルのアソシエーションを定義
- 保存するテーブルと同名_controller.rbにて、imageカラムの保存を許可
5-1. アソシエーションの定義
# 保存するテーブル内に追記
has_one_attached :image
<has_one_attachedメソッドとは>
各レコードとファイルを1対1の関係で紐づけるメソッドです。
has_one_attachedメソッドを記述したモデルの各レコードは、それぞれ1つのファイルを添付できる。
6. ビューファイルの編集
# new.html.erb内
form_withのfile_fieldオプションを選択する
imageがあたかも保存先テーブルのカラムであるかのように扱うことで、フォームのfile_fieldで選択された画像を保存先テーブルのオブジェクトと紐付けます。これも、Active Storageの特徴の一つ。
7. ストロングパラメーターへ追記
今回、パラメーターのキーは:imageと設定しているので、それを追記すれば問題ない。