carrierwave + rmagickで画像アップロード機能の実装

こんにちは!kossyです!





本日の気になったニュースはこちら
https://headlines.yahoo.co.jp/hl?a=20181012-00050002-yom-bus_allheadlines.yahoo.co.jp

資本主義である以上寡占化するのは当たり前な気もします。

どんどん世の中を便利にしてくれているIT企業の活動を国が邪魔するのは
どうなの?と思ってしまいます。

年明けにも、とのことなので、続報に期待です。










さて、今回はcarrierwave + rmagickで画像のアップロード機能の実装手順を
ブログに残してみたいと思います。



環境
Rails 5.1.6
Ruby2.5.1
carrierwave (1.2.3)
rmagick (2.16.0)
MacOS
Homebrew(1.7.2)




※画像を持たせたいモデルに既にカラムを持たせてあることを前提に話を進めます。
(micropostモデルにimageカラム等)


imagemagickの導入
画像のリサイズに必要なので導入します。

$ brew install imagemagick


gemfile編集
画像アップロード機能を実現してくれるcarrierwaveと、
imagemagickと共に画像のリサイズに必要なrmagickを導入します。

gemfile

gem 'carrierwave'
gem 'rmagick'

$ bundle install


image_uploader.rbの作成

ファイルのアップローダーを追加するために、
ターミナルで下記コマンドを実行します。

$ rails g uploader image

作成されたapp/uploaders/image_uploader.rbに
以下のコードを記述をします。

app/uploaders/image_uploader.rb

include CarrierWave::Rmagick

image_uploader.rb内の任意の場所に以下を記述
process resize_to_fit: [800, 800]

省略


モデルファイルでマウント

その後、画像データを持たせるモデルファイルに
以下の記述を追加します。

mount_uploader :image, ImageUploader

これでモデル側の準備は完了です。

ビューには、
新規投稿作成画面に、
f.file_field等のフォームヘルパーを用いて、ファイル投稿のフィールドを作成します。

コントローラでは、ストロングパラメーター内でファイルパラメータを許可するよう実装します。



これで、簡易的な画像の投稿機能は実装できます。