【发布时间】:2020-11-06 11:27:29
【问题描述】:
在一个新的 Rails 6 项目中,我有一个名为 object_classes 的表,其中有一列名为 ClassList_id。来自 schema.rb:
create_table "object_classes", force: :cascade do |t|
t.string "name"
t.integer "ClassList_id", null: false
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
t.index ["ClassList_id"], name: "index_object_classes_on_ClassList_id"
end
我意识到该列应该命名为 class_list_id 以符合 Rails 预期的命名约定。因此,我生成了一个新的迁移:
class FixColumnName < ActiveRecord::Migration[6.0]
def change
rename_column :object_classes, :ClassList_id, :class_list_id
end
end
但是,当我运行此迁移时,我收到以下错误:
/bin/bash -c "env RBENV_VERSION=2.6.1 /home/asfarley/.rbenv/libexec/rbenv exec bundle exec ruby /home/asfarley/imgseq/bin/spring rails 'db:migrate'"
== 20200716060501 FixColumnName: migrating ====================================
-- rename_column(:object_classes, :ClassList_id, :class_list_id)
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:
SQLite3::SQLException: no such table: main.ClassLists
/home/asfarley/imgseq/db/migrate/20200716060501_fix_column_name.rb:3:in `change'
/home/asfarley/imgseq/bin/rails:9:in `<top (required)>'
/home/asfarley/imgseq/bin/spring:15:in `require'
/home/asfarley/imgseq/bin/spring:15:in `<main>'
Caused by:
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such table: main.ClassLists
/home/asfarley/imgseq/db/migrate/20200716060501_fix_column_name.rb:3:in `change'
/home/asfarley/imgseq/bin/rails:9:in `<top (required)>'
/home/asfarley/imgseq/bin/spring:15:in `require'
/home/asfarley/imgseq/bin/spring:15:in `<main>'
Caused by:
SQLite3::SQLException: no such table: main.ClassLists
/home/asfarley/imgseq/db/migrate/20200716060501_fix_column_name.rb:3:in `change'
/home/asfarley/imgseq/bin/rails:9:in `<top (required)>'
/home/asfarley/imgseq/bin/spring:15:in `require'
/home/asfarley/imgseq/bin/spring:15:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
Process finished with exit code 1
我在这里做错了什么?我正在寻找一个解释,具体解决这里的问题,以便我可以理解将来如何避免这种情况。
【问题讨论】:
-
这不是一个合适的符号,试试这个... rename_column :object_classes, "ClassList_id", :class_list_id
-
@dbugger 很有趣,我应该尝试过,但我已经通过以不同的方式更改迁移来修复它。对于未来未定义的外键约束的情况,我会牢记您的建议。
-
@dbugger 实际上,基于我的迁移在删除外键后工作的事实,我相信未定义的符号在这里不是问题。
标签: ruby-on-rails database-migration rails-migrations