Railsでファイルのアップロード機能を簡単に追加する方法


プログラミングの勉強日記

2020年7月27日 Progate Lv.226

概要

 こちらの記事で扱ったgemのCarrierWave用いる。アップロードしたファイルの保存先はデフォルトでpublic/uploadsになる。
 前提として、scaffoldのコマンドで作られている。(以下のは例)

ターミナル
rails generate scaffold user name:string email:string image:string

使い方

 CarrierWaveを使うためにGemfileを編集する

Gemfile
gem 'carrierwave'

Gemfileを編集したら、CarrierWaveをインストールする。

ターミナル
bundle install

アップローダークラスとカラムの紐づけをする。

class モデル名 < ActiveRecord::Base
  mount_uploader [:カラム名], [アップローダークラス]
end

 AvatarアップローダとUserモデルに作成したフィールドavatarを関連付ける。(avatarにアップロードした画像をAvatarアップローダが処理するイメージ)

app/models/user.rb
class User < ActiveRecord::Base
  mount_uploader :avatar, AvatarUploader
end

 これに合わせてビューファイルを変更する。

app/views/users/_form.html.erb
<div class="field">
  <%= form.label :avatar %>
  <%= form.file_field :avatar, id: :user_avatar %>
</div>
app/views/users/show.html.erb
<p>
  <strong>Avatar path:</strong>
  <%= @user.avatar_path %>
</p>
<p>
  <%= image_tag @user.avatar_path %>
</p>

モデルとビューを修正したので、これでCarrierWaveの基本機能が使えるようになった。

参考文献
https://pikawaka.com/rails/carrierwave
https://www.sejuku.net/blog/65175