🦁

【RubyonRails】CarrierWaveを使って画像をDB登録する方法

2024/08/12に公開

はじめに

RubyonRailsでCarrierWaveを使って画像をDB登録するまでのチュートリアルを共有します。
具体的には、以下のような内容で進めます。

  1. CarrierWaveのインストール
  2. アップローダーの生成
  3. Modelの設定
  4. マイグレーションの作成
  5. Seedファイルの設定
  6. Viewの設定

0. 前提条件

今回は既にに作成済みのFoodモデルに画像登録用のfood_imageカラムを作成します。

1. CarrierWaveのインストール

GemfileにCarrierWaveを追加します。

gem 'carrierwave', '~> 3.0'

bundle installでインストールを実行します。

docker-compose exec web bundle install

2. アップローダーの作成

アップローダーを生成します。

docker-compose exec web bin/rails g uploader FoodImage

3. Modelの設定

FoodモデルにCarrierWaveを設定します。

class Food < ApplicationRecord
  mount_uploader :food_image, FoodImageUploader
end

4. マイグレーションの作成

food_imageカラムを追加するマイグレーションを作成します。

docker-compose exec web bin/rails g migration AddFoodImageToFoods food_image:string

マイグレーションを実行します。

docker-compose exec web bin/rails db:migrate

5. Seedファイルの設定

db/seeds.rbで画像を含むデータを登録します。

Food.create(
  food_name: "サンプルフード",
  foodcategory_id: 1,
  country: "日本",
  spice_level: 3,
  price: 500,
  food_image: File.open(Rails.root.join('db/seeds/sample_image.jpg')),
  title: "おいしいフード",
  body: "これはサンプルの説明です。"
)

6. Viewの設定

Viewで画像を表示します。

<% if @food.food_image? %>
  <%= image_tag @food.food_image.url %>
<% end %>

最後に

以上が、RubyonRailsでCarrierWaveを使って画像をDB登録するまでのチュートリアルです。

Discussion