试图更改列的类型,但 Rails 试图删除 table
Tried to change the type of a column, but Rails tries to drop the table instead
我正在尝试更改 table 列的数据类型。我尝试了两种不同的方法:
def change
remove_column :users, :permission_level
add_column :users, :permission_level, :integer
end
和
def change
change_column :users, :permission_level, :integer
end
然而,在这两种情况下我都收到了这个错误:
SQLite3::ConstraintException: FOREIGN KEY constraint failed: DROP TABLE "users"
/home/prios/blog/db/migrate/20170719071633_change_column_permission_level_from_string_to_integer.rb:3:in `change'
ActiveRecord::InvalidForeignKey: SQLite3::ConstraintException: FOREIGN KEY constraint failed: DROP TABLE "users"
/home/prios/blog/db/migrate/20170719071633_change_column_permission_level_from_string_to_integer.rb:3:in `change'
SQLite3::ConstraintException: FOREIGN KEY constraint failed
/home/prios/blog/db/migrate/20170719071633_change_column_permission_level_from_string_to_integer.rb:3:in `change'
Tasks: TOP => db:migrate
似乎 Rails 试图删除其中一列的数据类型 table 而不是 removing/changing,这是我不想要的。
更多信息:我正在尝试 alter/delete 的列没有关联任何外键。这是我还没用过的专栏
SQLite 不支持 remove_column 迁移方法。来自 http://www.sqlitetutorial.net/sqlite-alter-table/:
SQLite does not support ALTER TABLE DROP COLUMN statement.
显然,在 SQLite 中,这是一个相当复杂的过程,您需要重命名现有的 table,创建一个新的 table,而不需要删除您想要删除的列,复制原始 [=17] 中的所有日期=],然后去掉原来的table。我 运行 在我刚开始的时候就进入了这个,切换到 Postgres 并且没有回头。
我正在尝试更改 table 列的数据类型。我尝试了两种不同的方法:
def change
remove_column :users, :permission_level
add_column :users, :permission_level, :integer
end
和
def change
change_column :users, :permission_level, :integer
end
然而,在这两种情况下我都收到了这个错误:
SQLite3::ConstraintException: FOREIGN KEY constraint failed: DROP TABLE "users"
/home/prios/blog/db/migrate/20170719071633_change_column_permission_level_from_string_to_integer.rb:3:in `change'
ActiveRecord::InvalidForeignKey: SQLite3::ConstraintException: FOREIGN KEY constraint failed: DROP TABLE "users"
/home/prios/blog/db/migrate/20170719071633_change_column_permission_level_from_string_to_integer.rb:3:in `change'
SQLite3::ConstraintException: FOREIGN KEY constraint failed
/home/prios/blog/db/migrate/20170719071633_change_column_permission_level_from_string_to_integer.rb:3:in `change'
Tasks: TOP => db:migrate
似乎 Rails 试图删除其中一列的数据类型 table 而不是 removing/changing,这是我不想要的。
更多信息:我正在尝试 alter/delete 的列没有关联任何外键。这是我还没用过的专栏
SQLite 不支持 remove_column 迁移方法。来自 http://www.sqlitetutorial.net/sqlite-alter-table/:
SQLite does not support ALTER TABLE DROP COLUMN statement.
显然,在 SQLite 中,这是一个相当复杂的过程,您需要重命名现有的 table,创建一个新的 table,而不需要删除您想要删除的列,复制原始 [=17] 中的所有日期=],然后去掉原来的table。我 运行 在我刚开始的时候就进入了这个,切换到 Postgres 并且没有回头。