Shrineの導入(1)
Railsアプリケーションで、Shrineを使ってファイルアップロード機能を実装していきます。なお、前回記事で紹介済みの手順でCarrierWave/Refileの実装を行った後に以下の手順を試す場合は、いったん適用したマイグレーションをロールバックしておく必要があります。
インストール
GemfileにShrineを追記します。
…(中略)… gem 'shrine' …(中略)…
以下のコマンドを実行しShrineをインストールします。
bin/bundle
執筆時点では、2.13.0がインストールされました。
マイグレーション
articlesテーブルにimage_dataカラムを追加するマイグレーションファイルを追加します。
bin/rails g migration add_image_to_articles image_data:string
生成されたマイグレーションファイルが以下のようになっていることを確認しておきましょう。
class AddImageToArticles < ActiveRecord::Migration[5.2] def change add_column :articles, :image_data, :string end end
マイグレーションファイルに問題がなければ、以下のコマンドを実行します。
bin/rails db:migrate
アップローダーの作成
Shrineでは、CarrierWaveとは異なり、アップローダー用のクラスを作成するコマンドは提供されていないので、アップローダークラスを以下のように新規追加します。
class ImageUploader < Shrine end
アップローダーをモデルにインクルード
作成したアップローダーをArticleモデルとして使えるようにする設定を入れるため、以下のようにArticleモデルに追記します。
class Article < ApplicationRecord include ImageUploader[:image] …(中略)…
このようにアップローダークラスをインクルードするだけで、モデルから画像を扱えるようになります。
注意すべきは、アップローダークラスのキーである「:image」が、先ほどマイグレーションで追加したカラム名の「image_data」のprefixと一致している必要がある点です。
例えばマイグレーションで追加したカラム名を「profile_data」とすると、追加するキー名は「:profile」とする必要があります。