前提・実現したいこと
RubyOnRailsでwebアプリを作っています。
Railsアプリをherokuにデプロイし、heroku run rails db:migrate とした時、デフォルトを整数型に自動的にキャストすることはできませんというエラーが出てしまいます。
いろいろ調べてやってみましたがうまくいきません。
わかる方いましたら是非知恵を貸して頂きたいです。
発生している問題・エラーメッセージ
D, [2020-11-13T22:57:50.454435 #4] DEBUG -- : (4.7ms) ALTER TABLE "habits" ALTER COLUMN "complete" TYPE integer USING complete :: integer D, [2020-11-13T22:57:50.456618 #4] DEBUG -- : (1.8ms) ROLLBACK D, [2020-11-13T22:57:50.459004 #4] DEBUG -- : (2.0ms) SELECT pg_advisory_unlock(4351659385779522495) rails aborted! StandardError: An error has occurred, this and all later migrations canceled: PG::DatatypeMismatch: ERROR: default for column "complete" cannot be cast automatically to type integer
該当のソースコード
class ChangeDatatypecompleteOfHabits < ActiveRecord::Migration[6.0] def up change_column :habits, :complete, :integer, using: 'complete :: integer' end def down change_column :habits, :complete, :boolean, default: false, null: false end end 一度removeして作り直してます。 class RemoveCompleteFromHabits < ActiveRecord::Migration[6.0] def change remove_column :habits, :complete, :integer end end class AddComplete2ToHabits < ActiveRecord::Migration[6.0] def change add_column :habits, :complete, :integer, default: 0, null: false end end
試したこと
まず最初のエラー文で ヒント: USINGを指定してくださいのように出たので、migrationファイルを下記のように変更しました。
change_column :habits, :complete, :integer, using: 'complete :: integer'
そしたらUSINGを指定してくださいという表記は消えましたが、結局エラーは解決してませんでした。
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
Rails 6.0.3.4
ruby 2.6.3p62
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー