デフォルトの列値をfalseからtrueに変更しようとしています。しかし、私が実行するとrake db:migrate VERSION=904984092840298
次のエラーが発生しました。
StandardError: An error has occurred, this and all later migrations canceled:
PG::InvalidTextRepresentation: ERROR: invalid input syntax for type boolean: "---
:from: false
:to: true
"
: ALTER TABLE "plussites" ALTER COLUMN "hide_season_selector" SET DEFAULT '---
:from: false
:to: true
'
移行
class ChangeDefaultvalueForHideSeasonSelector < ActiveRecord::Migration
def change
change_column_default :plussites, :hide_season_selector, from: false, to: true
end
end
ドキュメントによると( change_column_default
)コードは機能するはずです。
オプションとして、up
とdown
を定義できます。
class ChangeDefaultvalueForHideSeasonSelector < ActiveRecord::Migration
def up
change_column_default :plussites, :hide_season_selector, true
end
def down
change_column_default :plussites, :hide_season_selector, false
end
end
使用しているActiveRecordのバージョンを確認する必要があります。あなたによるとコマンドrake db:migrate
まだRails 4.2以前)を使用しています。
4.2までのActiveRecord( change_column_default 4.2.9 )を使用している場合、from/toオプションはなく、新しいデフォルトオプションのみをparamとして定義できます。
class ChangeDefaultvalueForHideSeasonSelector < ActiveRecord::Migration
def change
change_column_default :plussites, :hide_season_selector, true
end
end
上記のソリューションでは、以前のデフォルト値が何であったかがメソッドにわからないため、ロールバックは許可されません。これが、個別のアップメソッドとダウンメソッドを定義する必要がある理由です。
class ChangeDefaultvalueForHideSeasonSelector < ActiveRecord::Migration
def up
change_column_default :plussites, :hide_season_selector, true
end
def down
change_column_default :plussites, :hide_season_selector, false
end
end
Rails 5以降を使用している場合は、from/to( change_column_default 5.0.0.1 =)。Rails 5では、選択したソリューションを使用できます。
class ChangeDefaultvalueForHideSeasonSelector < ActiveRecord::Migration
def change
change_column_default :plussites, :hide_season_selector, from: false, to: true
end
end
この説明が他の答えの下でコメントを持っている人々に役立つことを願っています。