Rails 迁移文件以创建 table 并在两个字段上添加唯一索引似乎在迁移过程中被忽略
Rails migration file to create table and add unique index on two fields seems being ignored during migration
我完全被困在这里了!我想添加一个唯一索引,以便关联 table 中的任何两条记录都不能具有相同的 user_id 和 course_id.
组合
我在 rails 中创建了以下迁移文件:
class CreateSignups < ActiveRecord::Migration
def change
create_table :signups do |t|
t.integer :course_id
t.integer :user_id
t.timestamps null: false
end
add_index :signups, :course_id
add_index :signups, :user_id
add_index :signups, [:course_id, :user_id], unique: true
end
end
...但由于某种原因,唯一的 'course_id & user_id' 未在 schema.rb 中表示,使用 rails 控制台系统允许我手动创建多个记录,其中course_id 和 user_id 完全一样。
注册 table 由注册模型管理,并有一个名为 'id' 的整数主键。课程和用户模型和数据库 table 遵循标准 rails 命名约定。
谁能看出为什么在此迁移中不理解它的唯一标准?
提前致谢!
您是否已经 运行 迁移一次(创建 table)然后添加索引?您可以通过以下方式进行检查:
bundle exec rails dbconsole
select * from schema_migrations;
如果您的迁移版本已经记录在 schema_migrations table 中,并且执行 rake db:migrate
将不会再次 运行 它。
要添加索引,您有 2 个选择:
Rollback CreateSignups
的迁移。这将删除当前的 table,然后执行 rake db:migrate
将重新创建带有索引的 table。
如果您不想丢失上一步中的数据,则必须从 rails dbconsole
.
[ 显式创建 indexes in MySQL =30=]
我完全被困在这里了!我想添加一个唯一索引,以便关联 table 中的任何两条记录都不能具有相同的 user_id 和 course_id.
组合我在 rails 中创建了以下迁移文件:
class CreateSignups < ActiveRecord::Migration
def change
create_table :signups do |t|
t.integer :course_id
t.integer :user_id
t.timestamps null: false
end
add_index :signups, :course_id
add_index :signups, :user_id
add_index :signups, [:course_id, :user_id], unique: true
end
end
...但由于某种原因,唯一的 'course_id & user_id' 未在 schema.rb 中表示,使用 rails 控制台系统允许我手动创建多个记录,其中course_id 和 user_id 完全一样。
注册 table 由注册模型管理,并有一个名为 'id' 的整数主键。课程和用户模型和数据库 table 遵循标准 rails 命名约定。
谁能看出为什么在此迁移中不理解它的唯一标准?
提前致谢!
您是否已经 运行 迁移一次(创建 table)然后添加索引?您可以通过以下方式进行检查:
bundle exec rails dbconsole
select * from schema_migrations;
如果您的迁移版本已经记录在 schema_migrations table 中,并且执行 rake db:migrate
将不会再次 运行 它。
要添加索引,您有 2 个选择:
Rollback
CreateSignups
的迁移。这将删除当前的 table,然后执行rake db:migrate
将重新创建带有索引的 table。如果您不想丢失上一步中的数据,则必须从
[ 显式创建 indexes in MySQL =30=]rails dbconsole
.