gpt4 book ai didi

ruby-on-rails - 使用迁移更改表列的默认值

转载 作者:数据小太阳 更新时间:2023-10-29 06:48:46 24 4
gpt4 key购买 nike

我尝试将默认列值从 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

最佳答案

您必须检查您使用的是哪个版本的 ActiveRecord。根据您的命令 rake db:migrate,您仍在使用 Ruby on Rails 4.2 或更早版本。

如果您使用的是 ActiveRecord 4.2(change_column_default 4.2.9),则没有 from/to 选项,您只能将新的默认选项定义为参数。

class ChangeDefaultvalueForHideSeasonSelector < ActiveRecord::Migration 
def change
change_column_default :plussites, :hide_season_selector, true
end
end

上面的解决方案不允许回滚,因为该方法不知道以前的默认值是什么。这就是为什么你必须定义一个单独的 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

如果您使用的是 Ruby on Rails 5 或更高版本,则可以通过 from/to ( change_column_default 5.0.0.1) 定义之前的值和应该之后的值。在 Ruby on Rails 5 上,您可以使用您选择的解决方案:

class ChangeDefaultvalueForHideSeasonSelector < ActiveRecord::Migration[5.0] 
def change
change_column_default :plussites, :hide_season_selector, from: false, to: true
end
end

我希望这个解释对其他答案下有评论的人有所帮助。

关于ruby-on-rails - 使用迁移更改表列的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42668391/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com