#はじめに
seedファイルに画像も追加したい時に、書き方が分からず悩んだので下記に記載します。
初学者による記載ですので、誤りがあればご指摘ください。
railsで画像を扱う場合、ActiveStorageかCarrierWaveを使っている場合が多いかと思います。
参考: ActiveStorage vs CarrierWave
今回はActiveStorageを使っている場合ですので、使っている方のみお進みください。
#ユーザーの初期データをseedファイルに記載する
deviseを使用して作成したユーザーの初期データをseedファイルに記載していきます。
ユーザーモデルのカラムはこのようになっています。
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ファイルへの記載をしていきましょう。
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を追加します。
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 編)