首页 > 解决方案 > Rails activeadmin 无法检测到现有表的自动增量字段

问题描述

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

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

在此处输入图像描述

如果我刷新提交的表单,直到自动增量 id 超过我表中的现有 id,它就可以工作。

标签: ruby-on-railspostgresqlrubygemsactiveadmin

解决方案


首先想到我能想到的是你已经在允许参数中传递了 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,但不建议这样做。


推荐阅读