Rails迁移文件创建表并在两个字段上添加唯一索引似乎在迁移期间被忽略

时间:2015-04-26 12:36:12

标签: ruby-on-rails ruby-on-rails-4.2

我完全被困在这里!我想添加一个唯一索引,以便关联表中没有两个记录可以具有相同的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&amp; user_id'没有在schema.rb中表示,并且使用rails控制台,系统允许我手动创建多个记录,其中course_id和user_id完全相同。

注册表由注册模型管理,并具有一个名为“id”的整数主键。课程和用户模型&amp;数据库表遵循标准的rails命名约定。

任何人都可以看到为什么这个迁移中没有理解这个独特的标准吗?

提前致谢!

1 个答案:

答案 0 :(得分:3)

您是否已经运行一次迁移(创建表)然后添加索引?您可以通过执行以下操作进行检查:

bundle exec rails dbconsole
select * from schema_migrations;

如果您的迁移版本已经记录在schema_migrations表中,并且rake db:migrate无法再次运行它。

要添加索引,您有两个选项:

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

  2. 如果您不想在上一步中丢失数据,那么您必须从rails dbconsole明确创建indexes in MySQL