首页 > 解决方案 > 如何在rails 6上重置ruby中的主键ID?

问题描述

我使用的是 rails 6.0.3.4,每次删除用户时,我都会尝试重置表“用户”的主键。

我尝试进入 rails 控制台并使用命令

ActiveRecord:: Base. connection. reset_pk_sequence!('users')

但我得到了错误

Traceback (most recent call last):
        1: from (irb):1
NoMethodError (undefined method `reset_pk_sequence!' for #<ActiveRecord::ConnectionAdapters::SQLite3Adapter:0x000000000af92360>)
Did you mean?  reset_sequence!

我也试过

ActiveRecord:: Base. connection. reset_sequence!('users')

但我明白了

Traceback (most recent call last):
        2: from (irb):1
        1: from (irb):2:in `rescue in irb_binding'
ArgumentError (wrong number of arguments (given 1, expected 2..3))

在我阅读的每篇文章中,该命令reset_pk_sequence! 似乎都有效,但对我来说却没有。

有什么办法可以重置我的表用户的主键?

提前致谢。

标签: ruby-on-rails

解决方案


对于 PostgreSQL,该方法确实存在(从 Rails 6.0.0 开始):

ActiveRecord::ConnectionAdapters::PostgreSQL::SchemaStatements#reset_pk_sequence!

https://apidock.com/rails/v6.0.0/ActiveRecord/ConnectionAdapters/PostgreSQL/SchemaStatements/reset_pk_sequence%21

请注意,您使用的是 SQLite:

#<ActiveRecord::ConnectionAdapters::SQLite3Adapter:0x000000000af92360>

所以你可用的方法在这里: https ://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SQLite3Adapter.html

更重要的是,您不应该仅仅因为您删除了一个用户就重置您的表格 ID。即使在您删除用户之后,数据库也可以毫无问题地处理增加 ID。

我很难想出一个在删除记录后需要重置 Db Id 的用例。

如果你真的想这样做: Reset the id field in a table in a sqlite db in Rails


推荐阅读