У меня есть приложение Rails с настраиваемым алгоритмом для генерации id
для одной таблицы. Теперь я решил использовать инкрементные идентификаторы по умолчанию, созданные Postgres в качестве основных ключей, и переместить мои пользовательские значения с id
в другой столбец, например uid
. И я хочу восстановить значения в столбце id
для всех записей - как обычно от 1 до n.
Каков наилучший способ сделать это? У меня около 1000 записей. Записи из других таблиц связаны с этими записями.Регенерировать идентификаторы существующих записей
1
A
ответ
0
Вы можете просто сделать это, выполнив итерацию по вашим записям и обновив их (и связанные с ними объекты). 1000 записей не так много для обработки.
Предположим, что у вас есть таблица с именем «my_objects» с ее моделью под названием «MyObject». Давайте также скажем, что у вас есть другая таблица с именем «related_objects» и ее модель «RelatedObject»
Вы можете перебирать все записи MyObjects и одновременно обновлять связанные объекты и запись.
records = MyObject.all #Whatever "MyObject" you have.
i = 0
records.each do |record|
#Updating whatever associated objects the record have
record.related_objects.each do |related_object|
related_object.update_column("my_object_id", i)
end
#Updating the record itself
record.update_column("id", i)
i++
end
0
Вы можете сохранить любое значение в ID колонка, но создать новый столбец с именем UID и установить его в качестве первичного ключа и автоматического приращения
def self.up
execute "ALTER TABLE mytable modify COLUMN uid int(8) AUTO_INCREMENT"
end
Вы можете сказать, модели использовать UID в качестве основных как
self.primary_key = 'uid'
Смежные вопросы
- 1. Связывание нескольких существующих записей
- 2. Обновление существующих отношений записей
- 3. Сильные активные идентификаторы записей
- 4. Изменить идентификаторы существующих категорий в Magento
- 5. Нет записей для существующих данных
- 6. cakePHP сохранение записей для объединения таблицы существующих записей
- 7. Регенерировать «случайный» запрос MySQL
- 8. как найти идентификаторы связанных записей
- 9. Сбросить идентификационный столбец для существующих значений без удаления существующих записей
- 10. как изменить ребенка/внешних ключей идентификаторы существующих записей без сохранения их
- 11. изменение существующих дубликатов записей в mysql
- 12. sql server - блокировка существующих записей в транзакции
- 13. Маркировка записей данных ember-данных как существующих
- 14. Вычислительное отношение записей, существующих в другой таблице
- 15. Восстановление таблицы Mysql без удаления существующих записей
- 16. Новые записи создаются при использовании существующих записей
- 17. Проверка существующих записей с подготовленным оператором MySQLi
- 18. Остановить Hibernate от обновления существующих записей
- 19. Excel VBA Добавление записей ниже существующих значений
- 20. MongoMapper - Обновление существующих записей новыми ключами
- 21. Обновление существующих записей в Hibernate ManyToMany Relation
- 22. Обновление существующих записей с помощью SQL
- 23. PHP терпит неудачу Обновление существующих записей
- 24. Попытка регенерировать zend_language_scanner.c
- 25. не r.id регенерировать
- 26. Регенерировать миниатюры wordpress GAE
- 27. nodejs/express. регенерировать сеанс
- 28. Как найти идентификаторы записей из массива записей, используя рубин 2.0
- 29. Возвращаясь только идентификаторы записей, которые соответствуют критериям
- 30. CQRS, источники событий и идентификаторы созданных записей
Как бы я обрабатывал отношения habtm? Когда я изменяю первичный ключ, они не обновляются автоматически. Я также думаю, что я должен обернуть обновления в транзакциях? – leemour
Вы можете создать временную модель ActiveRecord для средней таблицы вашей ассоциации habtm (как в ассоциации «has_many through») и использовать ее для обновления ключей в этой таблице, как и любой связанный объект. http://guides.rubyonrails.org/association_basics.html#choosing-between-has-many-through-and-has-and-belongs-to-many – Caillou
Как бы удалить ассоциации для старого id и воссоздать их для нового идентификатора ? 'objects = record.associatied_objects.map (&:id); record.associatied_objects = []; record.save !; Object.where (id: objects) .each {| o | record << o}' <- этот путь? – leemour