carrierwaveによる画像アップロード機能
画像アップロード
インストール
gem 'carrierwave'
$ bundle install --path vendor/bundle
アップローダの生成
$ rails generate uploader Icon
アップローダファイル
class IconUploader < CarrierWave::Uploader::Base include CarrierWave::MiniMagick # ActiveStorageの画像加工用モジュール storage :file # Override the directory where uploaded files will be stored. # This is a sensible default for uploaders that are meant to be mounted: # 画像置き場のディレクトリ def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end # Provide a default URL as a default if there hasn't been a file uploaded: # 画像がアップロードされていないときのデフォルト画像 def default_url 'sample.jpg' end # Add a white list of extensions which are allowed to be uploaded. # For images you might use something like this: # 許容するファイル形式 def extension_whitelist %w[jpg jpeg gif png] end end
モデル
usersテーブルにiconカラムがある前提
class User < ActiveRecord::Base mount_uploader :icon, IconUploader end
# 画像の関連付け user.icon = params[:file] user.save! # 画像URIの取得 user.icon.url # => '/url/to/file.png' user.icon.current_path # => 'path/to/file.png' user.icon_identifier # => 'file.png'
ビュー
アップロードフォーム
<%= f.file_field :icon %>
画像の表示
<%= image_tag(@user.icon_url) if @user.icon? %>
gitignoreの記述
すでにファイルをコミットしてからgitignoreを追記した場合コミット後にgit rm --cached ファイル名コマンドでgitの管理対象外に設定する
また不要なファイルをpushしてしまった場合は、git rm ファイル名コマンドでリモートリポジトリから削除する必要がある
# .gitignore /vendor /public/uploads