画像加工ツールを導入します。
画像加工のために必要なImage Magickという画像変換ツールと、それをRailsから使うためのGemをインストールします。
% brew install imagemagick #Image MagickはGemではなくソフトウェアです。
GemではないImage MagickをRubyやRailsで扱うにはMiniMagickというGemが必要です。またImageProcessingというGemも必要です。こちらはMiniMagickでは提供できない、画像サイズを調整する機能を提供するGemです。以下のようにGemfileに追加します。
gem 'mini_magick'
gem 'image_processing', '~> 1.2'
ターミナルでbundle install
% bundle install
ローカルサーバーを再起動してください。
以上で、Active Storageを使用するために必要なツールのインストールができました。
Active Storageをインストールします。
下記を実行すると、Active Storageに関連したマイグレーションファイルが作成されます。
% rails active_storage:install
続けてマイグレート。
% rails db:migrate
Active Storageのテーブルに画像を保存するための記述をします。
- Active Storageのテーブルとmessagesテーブルのアソシエーションを定義(このとき、messagesテーブルにカラムを追加する必要はありません。)
class Message < ApplicationRecord
has_one_attached :image
validates :content, presence: true
end
- messages_controller.rbにて、imageカラムの保存を許可
# 中略
private
def message_params
params.require(:message).permit(:content, :image).merge(user_id: current_user.id)
end
画像を表示できるようにビューを編集します。
- image_tagメソッドを記述して、画像を表示させます。
- if message.image.attached?と記述することで画像が存在する場合のみimage_tagが読み込まれるようにします。
- 画像の横幅と高さを指定します。variantメソッドを使用することでファイルの表示サイズを指定できます。注:幅x高さのxは半角英数のx(エックス)を使用します。
<%= image_tag message.image.variant(resize: '450x450'), if message.image.attached? %>
上記の記述でアップロードされた画像を指定した大きさで表示させることができました。