在一个新的Rails 6项目中,我有一个名为object_classes的表,其列名为ClassList_id。从schema.rb:
let cube: [f32; 72] = [
//positions //normals //colors
-0.5, 0.5, -0.5, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0,
-0.5, -0.5, -0.5, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0,
0.5, -0.5, -0.5, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0,
0.5, 0.5, -0.5, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0,
-0.5, 0.5, 0.5, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0,
-0.5, -0.5, 0.5, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0,
0.5, -0.5, 0.5, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0,
0.5, 0.5, 0.5, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0,
];
let cube_indices: [i32; 36] = [
0, 1, 2,
2, 3, 0,
4, 5, 6,
6, 7, 4,
4, 0, 3,
3, 7, 4,
5, 1, 2,
2, 6, 5,
0, 1, 5,
5, 4, 0,
3, 2, 6,
6, 7, 3,
];
我已经意识到该列应命名为class_list_id,以符合Rails预期的命名约定。因此,我产生了一个新的迁移:
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 FixColumnName < ActiveRecord::Migration[6.0]
def change
rename_column :object_classes, :ClassList_id, :class_list_id
end
end
我在这里做错了什么?我正在寻找一种专门解决这里出问题的解释,以便将来可以避免这种情况。
答案 0 :(得分:0)
很难知道故障是Rails还是SQLite,但是问题似乎是我为我的object_classes表定义了一个外键,该外键指向一个不存在的表。通过此迁移,我能够修复外键约束并重命名该列:
class FixColumnName < ActiveRecord::Migration[6.0]
def change
remove_foreign_key :object_classes, :ClassLists
rename_column :object_classes, :ClassList_id, :class_list_id
add_foreign_key :object_classes, :class_lists
end
end
答案 1 :(得分:0)
您的语法正常,因此该错误必须是保留名称错误。可能会尝试删除该列并再次创建该列,请注意有关迁移的大写字母,因为它们可能不必要地使您的代码复杂化。试试这个:
rails g migration RemoveClassListIdFromObjectClasses
将创建类似这样的迁移:
def drop
remove column :object_classes, :class_lis_id
end
然后运行
rails g migration AddClassListIdToObjectClasses
迁移应如下所示:
def change
add_column :object_classes, :class_list_id
end
请记住添加数据类型以及您可能需要的其他任何内容。 在那里,您可以检查它创建的迁移,并可以对其进行更改以添加数据类型或更改列的大小写,然后就可以开始了。
注意:如果可以,请接受答案,谢谢!