Добавление уникального ограничения через миграцию не работает
Я начинающий программист ruby, работающий над API рельсов. Проблема в том, что API находится в производстве, и теперь я хочу добавить уникальное ограничение к одному из столбцов в модели. В настоящее время разрешены повторяющиеся записи, и я хочу сделать этот столбец уникальным.
Поэтому я добавил два прибора с таким же именем, как это:
two:
name: MyString2
location:
status: 2
three:
name: MyString2
location:
status: 1
И тогда я попытался запустить миграцию следующим образом:
class AddUniqueToLocationColumnName < ActiveRecord::Migration
class User < ActiveRecord::Base
end
def self.up
remove_index :locations, column: :name
add_index :locations, :name, unique: true
end
def self.down
remove_index :locations, column: :name # remove unique index
add_index :locations, :name # adds just index, without unique
end
end
Но он показывает ошибку: "дубликаты существуют в базе данных. Миграция не удалась". Это же проблема. Уже есть дубликаты в производственной таблице. И я хочу добавить уникальное ограничение для столбца "имя" в таблице "местоположения". Как я могу сделать этот столбец уникальным?
1 ответ
Таким образом, вы не хотите дублировать имена для каких-либо двух записей в модальных местах, но дубликаты уже существуют? Вам придется избавиться от дубликатов одним из следующих способов:
удаление данных в модели и начало с нуля
удаление отдельных местоположений, которые имеют повторяющиеся имена
изменение названий мест, которые являются дубликатами.
Все это можно легко сделать в консоли rails / heroku.
Кроме того, вы можете добавить этот код в вашу модель местоположений:
class Location < ActiveRecord::Base
validates_presence_of :name
validates_uniqueness_of :name
end