23
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails6】seedファイルに画像を追加する(ActiveStorage使用)

Posted at

#はじめに
seedファイルに画像も追加したい時に、書き方が分からず悩んだので下記に記載します。
初学者による記載ですので、誤りがあればご指摘ください。

railsで画像を扱う場合、ActiveStorageかCarrierWaveを使っている場合が多いかと思います。
参考: ActiveStorage vs CarrierWave

今回はActiveStorageを使っている場合ですので、使っている方のみお進みください。

#ユーザーの初期データをseedファイルに記載する
deviseを使用して作成したユーザーの初期データをseedファイルに記載していきます。

ユーザーモデルのカラムはこのようになっています。

db/schema.rb

    t.string "name", null: false
    t.text "profile"
    t.string "email", default: "", null: false
    t.string "encrypted_password", default: "", null: false
    t.string "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.string "avatar"
    t.boolean "admin", default: false

deviseにデフォルトで入っているカラム以外に、ユーザー画像のカラムとしてavatarを追加しています。
(その他にも、nameやprofile、adminを追加しています。)

% rails s

をしてブラウザから画像登録ができるか確認してください。
※私は最初できませんでした(笑)パラメータに:avatarを渡してないのが原因でした。

もしエラーなく追加できた場合は、seedファイルへの記載をしていきましょう。

db/seeds.rb
user = User.create(name: "Saya", 
                  profile: "OLです。",
                  email: "aaa@aaa.com", 
                  password: "foobar", 
                  password_confirmation: "foobar",
                  admin: true)

まずはこれで下記コマンドを実施します。

% rails db:migrate:reset
% rails db:seed

上記で問題がなく初期データが反映されいるか確認しましょう。
問題がなければ画像(avatar)を追加します。

#seedファイルに画像を記載する

まず、app/assets/images に使いたい画像を追加します。
今回はcat.jpgというファイルを追加しました。

先ほどなぜuserを定義したのか。
それは、画像をattachするためです。
先ほどのseedファイルの記載にavatarを追加します。

db/seeds.rb
user = User.create(name: "Saya", 
                  profile: "OLです。",
                  email: "aaa@aaa.com", 
                  password: "foobar", 
                  password_confirmation: "foobar",
                  admin: true)
user.avatar.attach(io: File.open(Rails.root.join('app/assets/images/cat.jpg')),
                  filename: 'cat.jpg')

そして

% rails db:migrate:reset
% rails db:seed

を実行してください。
反映されているかブラウザで確認してみましょう!

#最後に
ActiveStorageに関する情報が少なかったので、悩まれている初学者の方に届いたら幸いです!

参考
ファイル/ IOオブジェクトの添付
【Rails 5.2】 Active Storageの使い方
Rails6 のちょい足しな新機能を試す64(db:seed 編)

23
26
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
23
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?