gpt4 book ai didi

mysql - 在为 Model Rails 创建对象之前获取下一个对象 ID

转载 作者:太空宇宙 更新时间:2023-11-03 10:35:29 26 4
gpt4 key购买 nike

我有一个 Model 在我的模型中创建该对象之前,我需要获取将要创建的下一个记录 ID,例如:

MyModel.last.id #=> 10
MyModel.last.destroy
MyModel.last.id #=> 9, so (Model.last.id + 1) would be 10... but...
MyModel.create #=> 11, my next id was actually 11

你能建议一个更好的方法来解决我的问题吗?

谢谢

最佳答案

您正在查找表的 AUTO_INCREMENT 值。 MySQL 将此类元数据存储在 INFORMATION_SCHEMA 中数据库。 AUTO_INCREMENT 值可以在 TABLES 中找到 table 。该表包含每个数据库和表的一个条目。

我不认为 Rails 或 MySQL gem 提供任何内置方法来获取它。

我在我之前的一个项目中使用过类似的东西:

# config/initializers/auto_increment.rb

module AutoIncrement
def auto_increment_value
connection.execute(<<-SQL.squish).first[0]
SELECT `AUTO_INCREMENT`
FROM `INFORMATION_SCHEMA`.`TABLES`
WHERE `TABLE_SCHEMA` = '#{connection.current_database}'
AND `TABLE_NAME` = '#{table_name}'
SQL
end
end

ActiveRecord::Base.extend(AutoIncrement)

然后你可以执行:

MyModel.auto_increment_value

并且它将返回表的 AUTO_INCREMENT 值的当前值,例如11

请注意,将该值用作您的记录的显式 ID 是不安全的。您应该让 MySQL 处理新 ID 的分配——这就是 AUTO_INCREMENT 的用途。

关于mysql - 在为 Model Rails 创建对象之前获取下一个对象 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49315424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com