ほげほげパッチ

有る事無い事 徒然なるままに

画像投稿機能

Active Storage

ファイルアップロードを実装できるGem(だったが、Railsに統合された)

ターミナルで導入

# マイグレーションファイル生成
% rails active_storage:install

% rails db:migrate


ImageMagick

コマンドラインから画像処理できるソフトウェア

% brew install imagemagick 


MiniMagick

ImageMagickRubyで使えるようにするGem

gem 'mini_magick'

# => (ターミナル)bundle install


ImageProcessing

MiniMagickではできない画像サイズの修正ができるGem

gem 'image_processing', '~> 1.2'

# => (ターミナル)bundle install


magicじゃなくてmagickだよ

ちょっと面白かった

qiita.com


has_one_attachedハズ ワン アタッチドメソッド

1対1の紐付け

class モデル < ApplicationRecord
  has_one_attached :ファイル名
end
# モデル.ファイル名 が使えるようになる
# ファイル名 = パラメーターのキー


image_tagイメージ タグメソッド

ヘルパーメソッド。img要素を生成。

モデルからファイルを呼び出して使える。(has_one_attachedとセット?)

<%= image_tag message.image %>


attached? アタッチドメソッド

ファイルの添付の有無を確認。true/false

<%= image_tag message.image if message.image.attached? %>


variant バリアントメソッド

Active Storageのメソッド。表示サイズ変更。

<%= image_tag message.image.variant(resize: '500x500') %>


バリデーション条件分岐

画像があれば、そのままOK。なければ:contentに対してバリデーション

-> 画像 or テキスト があればOK

class Message < ApplicationRecord
  # :was_attached?がtrueなら何もしない。falseならバリデーションを行う。
  validates :content, presence: true, unless: :was_attached?

  def was_attached?
    # imageがあればtrue、なければfalse
    self.image.attached?
  end
end