icon
icon

Railsで画像をアップロードする方法を現役エンジニアが解説【初心者向け】

初心者向けにRailsで画像をアップロードする方法について現役エンジニアが解説しています。Rubyのライブラリであるgemを使ってRailsにアップローダーを作成します。CarrierWaveというgemを使い、モデルにマウントしフォームを作成します。

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

Railsで画像をアップロードする方法について解説します。

Rubyについてそもそもよく分からないという方は、Rubyとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのオンラインブートキャンプRuby on Rails講座の内容をもとに紹介しています。

田島悠介

今回は、Rubyに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

Railsで画像をアップロードする方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

Railsで画像をアップロードする方法

Railsで画像をアップロードする場合は、Rubyで自分でコードを書いて実装する方法とgemを使用して実装する方法の2つがあります。

今回はgemで実装する方法を解説していきます。様々なgemがありますが、今回はCarrierWaveを使用した方法を紹介します。

画像アップロード用gemのCarrierWaveとは

CarrierWaveはシンプルでフレキシブルなファイルアップロードを実装できるgemです。簡単に画像のアップロード機能をアプリケーションに実装できる、便利なgemなのでぜひ使い方をマスターしましょう。

CarrierWaveの使い方

CarrierWaveは、以下の3ステップで使用できるようになります。

  1. gemをインストールする
  2. アップローダーを作成する
  3. モデルにカラムを追加し、マウントする

上記の3つの準備をした上で、画像を保存すると画像がpublicフォルダに保存されます。

サンプルコード

それではインストールから実装まで実際に書いてみましょう。まず、gemをインストールします。以下のコマンドをgemfileに追加してbundleします。

gem 'carrierwave'

次に以下のコマンドをターミナルでアップローダーを作成します。

今回はimageという名前のアップローダーを作成し、postモデルにimageというカラムを追加してマウントします。

rails generate uploader image

カラムを以下の方法で追加します。カラムはstringであれば、問題ないです。

rails generate migration add_image_to_posts image:string
rails db:migrate

そしてモデルに以下を追加します。

class Post < ActiveRecord::Base
  mount_uploader :image, ImageUploader
end

これで準備は完了です。viewに画像を送信するフォームとコントローラーを用意して、保存してみましょう。フォームは以下のように書きます。

<%= form_for @post do |f| %>
  <%= f.file_field :image %>
  <%= f.submit 'アップロードする'%>
<% end %>

コントローラーでは、以下のように書きます。ストロングパラメーターに特に違いはありません。

 

class PostsController < ApplicationController
def create
  @post = Post.new(post_params)
end

private

  def post_params
    params.require(:post).permit(:image)
  end
end

実際に投稿して、画像がpublicフォルダ内に保存されていれば完成です。

以上で解説を終わります。

 

[PR] 未経験からWebエンジニアを目指す方法とは

筆者プロフィール

メンター金成さん

フリーランスエンジニア。
Railsの案件を中心に、様々なアプリケーションを開発してます。

使える言語は、Ruby Python Go 。最近はGoにハマってます。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

TechAcademyでは初心者でもRuby on Railsを使ったプログラミングを習得できるオンラインブートキャンプを開催しています。

また、現役エンジニアから学べる無料体験も実施しているので、ぜひ参加してみてください。