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ステップで使用できるようになります。
- gemをインストールする
- アップローダーを作成する
- モデルにカラムを追加し、マウントする
上記の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フォルダ内に保存されていれば完成です。
以上で解説を終わります。
筆者プロフィール
メンター金成さん
フリーランスエンジニア。 使える言語は、Ruby Python Go 。最近はGoにハマってます。 |
内容分かりやすくて良かったです!
ゆかりちゃんも分からないことがあったら質問してね!
分かりました。ありがとうございます!
TechAcademyでは初心者でもRuby on Railsを使ったプログラミングを習得できるオンラインブートキャンプを開催しています。
また、現役エンジニアから学べる無料体験も実施しているので、ぜひ参加してみてください。