我现有的rails应用程序有一些带有一些数据的表。在使用activeadmin之前,我直接从postgresql客户端进行了CRUD操作。
我不知道我是否错过了文档或这是一个错误:activeadmin无法检测到我现有的表自动增量ID。
如果我刷新提交的表单,直到自动增量ID超过表格中的现有ID,它就会起作用。
答案 0 :(得分:2)
首先想想我能想到的是你在permit params中传递了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');
从rails控制台重置postgres序列:
ActiveRecord::Base.connection.tables.each do |t|
ActiveRecord::Base.connection.reset_pk_sequence!(t)
end
另一个解决方案是覆盖song_artist类中的save()方法,为新记录手动设置song_artist id但不建议。