在我的Rails structure.sql
中,我有这行代码:
CREATE UNIQUE INDEX primary_active_fruit_in_season_constraint ON trees USING btree (user_id) WHERE (is_ripe AND is_in_season);
我不再需要此验证,因此我将删除Tree
模型上的Rails代码中的验证。但是如何删除此数据库验证?它从哪里来的? rails迁移中的哪些代码行创建了这个?如何删除它?
答案 0 :(得分:0)
我们无法知道是谁创建了该索引,但是附加到它的WHERE
子句暗示(因为AR通常不知道这些高级内容)它是用以下方式手动创建的:
connection.execute('create unique index ...')
您可以以相同的方式删除迁移中的索引:
def up
connection.execute('drop index primary_active_fruit_in_season')
end
def down
connection.execute('CREATE UNIQUE INDEX primary_active_fruit_in_season_constraint ON trees USING btree (user_id) WHERE (is_ripe AND is_in_season)')
end
手动创建一个包含这两种方法的迁移文件,并像往常一样rake db:migrate
。