0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Active Storageを用いて画像をアップロードする方法

Last updated at Posted at 2021-05-18

画像加工ツールを導入します。


画像加工のために必要な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? %>

上記の記述でアップロードされた画像を指定した大きさで表示させることができました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?