ruby-on-rails - Rails activeadmin 无法检测到现有表的自动增量字段
问题描述
我有现有的 rails 应用程序,其中包含一些包含一些数据的表。在使用 activeadmin 之前,我直接从 postgresql 客户端进行了 CRUD 操作。
我不知道我是否错过了文档或者这是一个错误:activeadmin 无法检测到我现有的表的自动增量 ID。
如果我刷新提交的表单,直到自动增量 id 超过我表中的现有 id,它就可以工作。
解决方案
首先想到我能想到的是你已经在允许参数中传递了 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,但不建议这样做。
推荐阅读
- windows - 如何在bat中获取特定路径下的lib文件列表?
- python - PowerTransform inverse_transform 未准确反转
- amazon-web-services - GitHub 操作触发 cypress e2e 测试的批处理代码构建不起作用
- angular - mat-optgroup 不适用于 compareWith
- performance - MySQL 8.0.18:关键效率 0.0%
- java - 是否有任何 API 可以在 java 中格式化货币值?
- pagination - 与客户端同步服务器端分页
- c++ - C++ 捕获错误“抛出 'std::out_of_range' 的实例”
- vue.js - 超时后如何更改 V-Snackbar 的值
- python - python web scrape如何用逗号分隔结果