如何在不调用Model.last.id的情况下获取Rails中的下一个可用唯一ID?

时间:2013-04-25 00:05:28

标签: ruby-on-rails ruby postgresql activerecord rails-activerecord

我填充了一个数据库,然后删除了所有用户。现在我需要获得下一个可用的ID(最后一个使用的是109,但是我需要在任何情况下都可以使用它,而不仅仅是我唯一的ID)而不需要调用Model.all.last。这可能,我该怎么做?

2 个答案:

答案 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特有的,但你用标记了这一点,所以这应该不是问题。

答案 1 :(得分:0)

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

此外,如果您偶尔需要手动更新,我知道如果您使用像phpmyadmin这样的东西,您可以通过查看底部的表格结构来获取值,它将显示“Next autoindex”。