Rails activeadmin не может обнаружить поле автоинкремента существующей таблицы - PullRequest
0 голосов
/ 30 мая 2018

У меня есть приложение rails, в котором есть несколько таблиц с некоторыми данными.Я выполнил операцию CRUD непосредственно из клиента postgresql перед использованием activeadmin.

Я не знаю, пропустил ли я документацию или это ошибка: activeadmin не может обнаружить мой существующий идентификатор автоинкремента для таблицы.

enter image description here

Если я обновлю отправленную форму до тех пор, пока идентификатор автоинкремента не превзойдет существующий идентификатор в моей таблице, это сработает.

1 Ответ

0 голосов
/ 30 мая 2018

Первое, о чем я мог подумать, это то, что вы передали параметр id в параметрах разрешения.Пожалуйста, проверьте это, и если оно присутствует, удалите его.

Во-вторых, как уже упоминалось в посте, в базе данных уже есть данные, поэтому существует проблема с сгенерированными последовательностями, поскольку их можно использовать только один раз.

Решение состоит в том, чтобы установить для последовательности вашего столбца song_artists.id самое высокое значение в таблице с помощью запроса, подобного следующему:

SELECT setval('song_artist_id_seq', (SELECT max(id) FROM song_artists));

Я предполагаю, что ваше имя последовательности "song_artist_id_seq"", имя таблицы" song_artist "и имя столбца" id ".

Чтобы получить имя последовательности, выполните указанную ниже команду:

SELECT pg_get_serial_sequence('tablename', 'columname'); 

Для сброса последовательностей postgres из консоли rails:

ActiveRecord::Base.connection.tables.each do |t|
 ActiveRecord::Base.connection.reset_pk_sequence!(t)
end

Другим решением будет переопределениеметод save () в вашем классе song_artist для ручной установки идентификатора song_artist для новых записей, но это не рекомендуется.

...