画像投稿

f:id:kokorouruou:20210718183118p:plain

私が作成しているアプリケーション「Yamashiru」を受けて気になった点や復習した方が今後の役に立つと思って作成しています。

さらにエンジニア初心者の方に向けて タメになる情報をお届けします。

今回は、、、

画像投稿について

SNS等でよく使用される画像投稿について、今回はActive Storageというアップロードツールを使用して紹介します。

Active Storageとは

ファイルアップロード機能を簡単に実装できるGemです。指定のコマンドを実行するだけで簡単に導入が出来ます。

画像加工ツールの導入

Active Storageでファイルをアップロードして保存した後、画像を加工してから(サイズや色など)表示できるようにします。

ImageMagick

% brew install imagemagick

MiniMagick

Gemfile

gem 'mini_magick'

ImageProcessing

Gemfile

gem 'image_processing', '~> 1.2'

上記が入力終えたら

% bundle install

Active Storage

% rails active_storage:install

% rails db:migrate

画像の保存

先ほど作成したActive Storageのテーブルに、画像を保存するための実装を行います。

has_one_attached

各レコードとファイルを1対1の関係で紐づけるメソッド。

使い方イメージ

class モデル < ApplicationRecord
  has_one_attached :ファイル名
end

Tweetsテーブルで投稿する場合

class Tweet < ApplicationRecord
  belongs_to :user
  extend ActiveHash::Associations::ActiveRecordExtensions
  belongs_to :theme
  belongs_to :prefecture
  belongs_to :mountain_name
  belongs_to :climbing_time
  belongs_to :mountain_view
  belongs_to :stamina
  belongs_to :danger


  has_one_attached :image

  validates :title, :image, presence: true
  with_options numericality: { other_than: 1, message: "can't be blank"} do
  validates :theme_id
  validates :prefecture_id
  end
end

アソシエーションが組めた後は画像の保存を許可するストロングパラメーターをcontrollerに記述

  private

  def tweet_params
    params.require(:tweet).permit(:title, :image, :theme_id, :prefecture_id, :mountain_name_id, :climbing_time_id, :mountain_view_id, :stamina_id, :danger_id).merge(user_id: current_user.id)
  end

画像の表示

保存した画像をブラウザ上で表示させるために今回はRailsのヘルパーメソッドであるimage_tagを使用して、簡単に画像を参照します。

image_tag

img要素を生成するRailsのヘルパーメソッドです。

使い方イメージ

# ファイルをモデルから指定する場合
<%= image_tag モデル.画像ファイル %>
<%= image_tag user.avatar %>

# app/assets/ディレクトリ下の画像ファイルパスでも指定できる
<%= image_tag 画像ファイルのパス %>
<%= image_tag "avatar.png" %>

いかがでしたでしょうか? 1個ずつ落ち着いて実施出来れば簡単な操作になりますので是非ご活用下さい!