I populated a database, then deleted all the users. Now I need to get the next available ID (the last one used was 109, but I need this to work in any situation where this happens, not just my unique one) without calling Model.all.last. Is this possible, and how do I do it?
问问题
1453 次
2 回答
4
当您为 ActiveRecordModel
类创建表时,您将获得一个名为models
. 此表的id
s 将是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标记了它,所以这应该不是问题。
于 2013-04-25T01:30:37.530 回答
0
要动态地做到这一点,我会说你最好的选择是将值存储在另一个表中。您可以使用每次添加记录时更新字段的触发器来执行此操作。此方法不依赖于您的 rails 应用程序,因此它可能比在 ruby 中执行此方法更好。
另外,如果您只是偶尔需要手动更新,我知道如果您使用的是 phpmyadmin 之类的东西,您可以通过查看底部的表结构来获取值,它会显示“Next autoindex”。
于 2013-04-25T00:49:59.313 回答