前提・実現したいこと
railsでseedを用いてデータベースに画像を保存できるようにしたいです。
CarrierWaveを用いる方法が見つかったのでそちらを試しています。
画像以外のデータのseedはできているのですが、画像がうまくいきません。
下記の状態の解決方法、または他の実現方法がありましたら教えていただきたいです。
参考:https://sweets-engineer.com/carrierwaveseed/
発生している問題・エラーメッセージ
文字数制限のため、エラー周辺のみ抜粋します。
情報が不足した場合は申し訳ございません。
$ rails db:reset Dropped database 'db/development.sqlite3' Dropped database 'db/test.sqlite3' Created database 'db/development.sqlite3' Created database 'db/test.sqlite3' -- create_table("categories", {:force=>:cascade}) -> 0.0161s -- create_table("elements", {:force=>:cascade}) -> 0.0195s -- create_table("prizes", {:force=>:cascade}) -> 0.0194s -- create_table("rarities", {:force=>:cascade}) -> 0.0198s -- create_table("categories", {:force=>:cascade}) -> 0.0157s -- create_table("elements", {:force=>:cascade}) -> 0.0193s -- create_table("prizes", {:force=>:cascade}) -> 0.0194s -- create_table("rarities", {:force=>:cascade}) -> 0.0224s rails aborted! TypeError: can't cast File /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/abstract/quoting.rb:34:in `rescue in type_cast' /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/abstract/quoting.rb:24:in `type_cast' . . . /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/spring-2.1.0/lib/spring/client.rb:30:in `run' /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/spring-2.1.0/bin/spring:49:in `<top (required)>' /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/spring-2.1.0/lib/spring/binstub.rb:11:in `load' /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/spring-2.1.0/lib/spring/binstub.rb:11:in `<top (required)>' /home/ubuntu/environment/gbf_gacha/bin/spring:15:in `require' /home/ubuntu/environment/gbf_gacha/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Caused by: TypeError: TypeError /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/abstract/quoting.rb:195:in `_type_cast' /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/sqlite3/quoting.rb:61:in `_type_cast' /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/abstract/quoting.rb:31:in `type_cast' /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/abstract/quoting.rb:145:in `block in type_casted_binds' . . . /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/spring-2.1.0/lib/spring/client.rb:30:in `run' /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/spring-2.1.0/bin/spring:49:in `<top (required)>' /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/spring-2.1.0/lib/spring/binstub.rb:11:in `load' /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/spring-2.1.0/lib/spring/binstub.rb:11:in `<top (required)>' /home/ubuntu/environment/gbf_gacha/bin/spring:15:in `require' /home/ubuntu/environment/gbf_gacha/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Tasks: TOP => db:reset => db:setup => db:seed (See full trace by running task with --trace)
該当のソースコード
seeds.rb
Prize.find_or_create_by!(name:"ダーインスレイブ", rarity_id: 2, category_id:2, element_id:2, icon: open("./public/icons/ssrw1.jpg"))
schema.rb
ActiveRecord::Schema.define(version: 2020_04_02_143359) do create_table "prizes", force: :cascade do |t| t.string "name" t.integer "rarity_id" t.integer "category_id" t.integer "element_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "icon" end
prize.rb
class Prize < ApplicationRecord belongs_to :category belongs_to :rarity belongs_to :element validates :name, {presence: true, uniqueness: true} validates :rarity_id, inclusion: { in: 2..4 } validates :category_id, inclusion: { in: 2..3 } validates :element_id, inclusion: { in: 2..7 } mount_uploader :icon, IconUploader end
試したこと
変数型によるエラーかと考え、seeds.rbの記述を書き換えてみました。
icon: open("./public/icons/ssrw1.jpg")
↓
icon: open("./public/icons/ssrw1.jpg").to_s
すると、rails db:resetは通りました。
しかし、データベースにiconの情報が反映されていませんでした。
2.6.3 :002 > Prize.all Prize Load (0.4ms) SELECT "prizes".* FROM "prizes" LIMIT ? [["LIMIT", 11]] => #<ActiveRecord::Relation [#<Prize id: 1, name: "ダーインスレイブ", rarity_id: 2, category_id: 2, element_id: 2, created_at: "2020-04-03 10:35:11", updated_at: "2020-04-03 10:35:11", icon: nil>]>
補足情報(FW/ツールのバージョンなど)
AWS Cloud9
Ruby 2.6.3p62
Rails 5.2.4.2
CarrierWave 1.3.1
画像の保存先 /public/icons
あなたの回答
tips
プレビュー