Добавление уникального ограничения через миграцию не работает

Я начинающий программист 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 ответ

Таким образом, вы не хотите дублировать имена для каких-либо двух записей в модальных местах, но дубликаты уже существуют? Вам придется избавиться от дубликатов одним из следующих способов:

  1. удаление данных в модели и начало с нуля

  2. удаление отдельных местоположений, которые имеют повторяющиеся имена

  3. изменение названий мест, которые являются дубликатами.

Все это можно легко сделать в консоли rails / heroku.

Кроме того, вы можете добавить этот код в вашу модель местоположений:

class Location < ActiveRecord::Base
   validates_presence_of :name
   validates_uniqueness_of :name
end
Другие вопросы по тегам