0

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?

4

2 回答 2

4

当您为 ActiveRecordModel类创建表时,您将获得一个名为models. 此表的ids 将是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 特有的,但你已经用标记了它,所以这应该不是问题。

于 2013-04-25T01:30:37.530 回答
0

要动态地做到这一点,我会说你最好的选择是将值存储在另一个表中。您可以使用每次添加记录时更新字段的触发器来执行此操作。此方法不依赖于您的 rails 应用程序,因此它可能比在 ruby​​ 中执行此方法更好。

另外,如果您只是偶尔需要手动更新,我知道如果您使用的是 phpmyadmin 之类的东西,您可以通过查看底部的表结构来获取值,它会显示“Next autoindex”。

于 2013-04-25T00:49:59.313 回答