画像投稿機能
Active Storage
ファイルアップロードを実装できるGem(だったが、Railsに統合された)
ターミナルで導入
# マイグレーションファイル生成
% rails active_storage:install
% rails db:migrate
ImageMagick
コマンドラインから画像処理できるソフトウェア
% brew install imagemagick
MiniMagick
ImageMagickをRubyで使えるようにするGem
gem 'mini_magick' # => (ターミナル)bundle install
ImageProcessing
MiniMagickではできない画像サイズの修正ができるGem
gem 'image_processing', '~> 1.2' # => (ターミナル)bundle install
magicじゃなくてmagickだよ
ちょっと面白かった
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