gpt4 book ai didi

ruby-on-rails-3 - 添加:default => true to boolean in existing Rails column

转载 作者:行者123 更新时间:2023-12-03 04:20:57 26 4
gpt4 key购买 nike

我在这里看到了一些关于向现有列添加默认 bool 值的问题(即 this one )。所以我尝试了 change_column 建议,但我一定做得不对。

我尝试过:

$ change_column :profiles, :show_attribute, :boolean, :default => true

返回-bash:change_column:找不到命令

然后我跑了:

$ rails g change_column :profiles, :show_attribute, :boolean, :default => true

...和

$ rails change_column :profiles, :show_attribute, :boolean, :default => true

然后运行 ​​rake db:migrate,但 :show_attribute 的值仍为 nil。在我上面提到的问题中,它说在 PostgreSQL 中你需要手动更新它。由于我使用的是 PostgreSQL,因此我在 create_profiles 迁移中添加了以下内容:

t.boolean :show_attribute, :default => true

有人可以告诉我我在这里做错了什么吗?

最佳答案

change_columnActiveRecord::Migration的一个方法,因此不能在控制台中这样调用。

如果您想为此列添加默认值,请创建新的迁移:

rails g 迁移 add_default_value_to_show_attribute

然后在创建的迁移中:

# That's the more generic way to change a column
def up
change_column :profiles, :show_attribute, :boolean, default: true
end

def down
change_column :profiles, :show_attribute, :boolean, default: nil
end

或者更具体的选项:

def up
change_column_default :profiles, :show_attribute, true
end

def down
change_column_default :profiles, :show_attribute, nil
end

然后运行rake db:migrate

它不会对已创建的记录进行任何更改。为此,您必须创建一个 rake 任务 或直接进入 rails 控制台 并更新所有记录(我不建议在生产中这样做)。

当您将 t.boolean :show_attribute, :default => true 添加到 create_profiles 迁移时,预计它不会执行任何操作。仅执行尚未运行的迁移。如果您从一个新的数据库开始,那么它将默认设置为 true。

关于ruby-on-rails-3 - 添加:default => true to boolean in existing Rails column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8627156/

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