質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

1435閲覧

seedを用いて画像をデータベースに保存したい

kuwachan

総合スコア4

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/04/03 11:13

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問