Ruby on rails 在迁移过程中,用于在两个字段上创建表和添加唯一索引的Rails迁移文件似乎被忽略

Ruby on rails 在迁移过程中,用于在两个字段上创建表和添加唯一索引的Rails迁移文件似乎被忽略,ruby-on-rails,ruby-on-rails-4.2,Ruby On Rails,Ruby On Rails 4.2,我完全被困在这里了!我想添加一个唯一的索引,以便关联表中的两条记录不能具有相同的用户id和课程id组合 我在rails中创建了以下迁移文件: class CreateSignups < ActiveRecord::Migration def change create_table :signups do |t| t.integer :course_id t.integer :user_id t.timestamps null: fals

我完全被困在这里了!我想添加一个唯一的索引,以便关联表中的两条记录不能具有相同的用户id和课程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
class CreateSignups
…但由于某些原因,schema.rb中没有表示唯一的“course\u id&user\u id”,并且使用rails控制台,系统允许我手动创建多个记录,其中course\u id和user\u id完全相同

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

有人知道为什么在这次迁移中没有理解唯一的标准吗


提前谢谢

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

bundle exec rails dbconsole
select * from schema_migrations;
如果您的迁移版本已经记录在schema_migrations表中,并且执行
rake db:migrate
将不会再次运行它

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

  • CreateSignups
    的迁移。这将删除当前表,然后执行
    rake db:migrate
    将使用索引重新创建表

  • 如果您不想在上一步中丢失数据,那么必须从
    railsdbconsole
    显式创建


  • 回答得好!是的,我认为向现有迁移文件添加索引将有助于控制不断增加的迁移文件数量。非常感谢您快速、清晰、信息丰富的回答。