gpt4 book ai didi

mysql - 将 STI 添加到现有表

转载 作者:行者123 更新时间:2023-11-29 15:03:40 25 4
gpt4 key购买 nike

我想使用自定义类型列将 STI 添加到现有表中。我们称这个ta​​ste_type为Fruit,对应的模型为Fruit。

在水果模型中我有:

set_inheritance_column :taste_type

在添加 STI 的迁移中,我有:

class AddSTI < ActiveRecord::Migration
def self.up
add_column :fruits, :taste_type, :string, :limit => 100, :null => false
Fruit.reset_column_information
Fruit.find_by_id(1).update_attributes({:taste_type => 'Sour'})
end

def self.down
remove_column :fruits, :taste_type
end

end

当我运行迁移时,出现以下错误:

Mysql::Error: Column 'taste_type' cannot be null: ...

知道发生什么事了吗?如果我注释 Fruit 模型中的 set_inheritance_column,然后在运行迁移后取消注释,我就可以运行迁移。但显然,我不想这样做。

最佳答案

taste_type 列不能为空。数据库会抛出错误,因为您正在向包含现有行的表添加新列(不能为空)。

解决此问题的一种方法是向列添加默认值,然后重置默认值。

add_column :fruits, :taste_type, :string, :limit => 100, :null => false, 
:default => "Sour"
change_column :fruits, :taste_type, :string, :limit => 100, :null => false

Fruit.reset_column_information
Fruit.find_by_id(1).update_attributes({:taste_type => 'Sour'})

另一种方法是在截断 fruits 表后运行迁移。

关于mysql - 将 STI 添加到现有表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2616957/

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