LoginSignup
12
15

More than 3 years have passed since last update.

【Rails】画像をリサイズしてアップロード

Last updated at Posted at 2020-01-08

ModelとTableを作成

$ rails g model Hoge image
$ rails db:migrate

gemを追加

Gemfile
gem 'carrierwave'
gem 'mini_magick'
$ bundle install

Uploaderを作成

$ rails g uploader Hoge

画像を保存するディレクトリや、許可する拡張子等を必要に応じて修正。
よく使う設定はあらかじめコメントとして記載されています。

app/uploaders/picture_uploader.rb
class HogeUploader < CarrierWave::Uploader::Base
  storage :file

  # アップロードファイルの保存先
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  # アップロード可能な拡張子のリスト
  def extension_whitelist
    %w(jpg jpeg gif png)
  end
end

モデルにマウント

app/models/hoge.rb
class Hoge < ApplicationRecord
 #mount_uploader 画像名を保存するカラム名, アップローダー名
  mount_uploader :image, HogeUploader
end

画像をリサイズ

app/uploaders/picture_uploader.rb
class HogeUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick
  process resize_to_fill: [1000, 500]
.
.

resize_to_fill以外のオプションに関しては、以下の記事にわかりやすくまとめられています。
CarrierWave + RMagick 画像のリサイズをまとめてみました

Controller、Viewルーティングを作成

$ rails g controller hoges index
app/controllers/hoges_controller.rb
class HogesController < ApplicationController
  def index
    @new_image = Hoge.new
    @all_images = Hoge.all
  end

  def create
    @new_image = Hoge.new(hoge_params)
    if @new_image.save
      redirect_to hoges_url
    else
      render action: :index
    end
  end

  private

  def hoge_params
    params.require(:hoge).permit(:image)
  end
end
app/views/hoges/index.html.erb
<h2>画像アップロード</h2>
<%= form_with model: @new_image, local: true do |f| %>
  <%= f.file_field :image %>
  <%= f.submit 'アップロード' %>
<% end %>

<h2>アップロードした画像一覧</h2>
<% @all_images.each do |i| %>
  <%= image_tag "/uploads/hoge/image/#{i[:id]}/#{i[:image]}" %>
<% end %>
config/routes.rb
Rails.application.routes.draw do
  get 'hoges', to: 'hoges#index'
  post 'hoges', to: 'hoges#create'
end

削除する場合

image_object = Hoge.first
image_object.remove_image! #画像のカラム名がhogeならremove_hoge!
image_object.save

TODO

・画像をS3にアップロード

12
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
15