我填充了一个数据库,然后删除了所有用户。现在我需要获得下一个可用的ID(最后一个使用的是109,但是我需要在任何情况下都可以使用它,而不仅仅是我唯一的ID)而不需要调用Model.all.last。这可能,我该怎么做?
答案 0 :(得分:4)
当您为ActiveRecord Model
类创建表时,您将获得一个名为models
的表。此表的id
将是serial
列,可从models_id_seq
序列中获取其值。您可以使用此函数获取此序列生成的最后一个值:
select last_value from models_id_seq
所以您只需要一个简单的select_value
电话:
last_id = ActiveRecord::Base.connection
.select_value('select last_value from models_id_seq')
.to_i
请记住,当您尝试查找最后一个id
值时,您会遇到麻烦,其他方法正在使用您的桌子。这也是PostgreSQL特有的,但你用postgresql标记了这一点,所以这应该不是问题。
答案 1 :(得分:0)
要动态地做,我会说最好的办法是将值存储在另一个表中。您可以使用trigger执行此操作,每次添加记录时都会更新字段。此方法不依赖于您的rails应用程序,因此它可能比在ruby中执行它更好。
此外,如果您偶尔需要手动更新,我知道如果您使用像phpmyadmin这样的东西,您可以通过查看底部的表格结构来获取值,它将显示“Next autoindex”。