Rails activeadmin无法检测自动增量字段现有表

时间:2018-05-30 00:18:59

标签: ruby-on-rails postgresql rubygems activeadmin

我现有的rails应用程序有一些带有一些数据的表。在使用activeadmin之前,我直接从postgresql客户端进行了CRUD操作。

我不知道我是否错过了文档或这是一个错误:activeadmin无法检测到我现有的表自动增量ID。

enter image description here

如果我刷新提交的表单,直到自动增量ID超过表格中的现有ID,它就会起作用。

1 个答案:

答案 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但不建议。