我完全被困在这里!我想添加一个唯一索引,以便关联表中没有两个记录可以具有相同的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命名约定。
任何人都可以看到为什么这个迁移中没有理解这个独特的标准吗?
提前致谢!
答案 0 :(得分:3)
您是否已经运行一次迁移(创建表)然后添加索引?您可以通过执行以下操作进行检查:
bundle exec rails dbconsole
select * from schema_migrations;
如果您的迁移版本已经记录在schema_migrations表中,并且rake db:migrate
无法再次运行它。
要添加索引,您有两个选项:
Rollback CreateSignups
的迁移。这将删除当前表,然后执行rake db:migrate
将重新创建带索引的表。
如果您不想在上一步中丢失数据,那么您必须从rails dbconsole
明确创建indexes in MySQL。