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 个选择:

  1. Rollback CreateSignups 的迁移。这将删除当前的 table,然后执行 rake db:migrate 将重新创建带有索引的 table。

  2. 如果您不想丢失上一步中的数据,则必须从 rails dbconsole.

    [ 显式创建 indexes in MySQL =30=]