Rails 3 - 如何从 mysql 表中查找最后插入的 ID

Posted

技术标签:

【中文标题】Rails 3 - 如何从 mysql 表中查找最后插入的 ID【英文标题】:Rails 3 - how to find last inserted ID from mysql table 【发布时间】:2011-06-06 19:49:34 【问题描述】:

在我的控制器中,我有以下命令序列:

SAVE DATA INTO FIRST TABLE

_get ID of inserted item into table from first step_

SAVE DATA INTO SECOND TABLE WITH ID FROM FIRST COMMAND

if FIRST.save && SECOND.save
 do something

我想知道,如何获取项目的 id,它会立即插入到数据库中...我尝试谷歌搜索,但找不到此信息...

提前感谢您的提示

【问题讨论】:

【参考方案1】:
# SAVE DATA INTO FIRST TABLE
first_instance = FirstModel.new( :foo => :bar )
first_save = first_instance.save

# _get ID of inserted item into table from first step_
first_instance_id = first_instance.id

# SAVE DATA INTO SECOND TABLE WITH ID FROM FIRST COMMAND
second_save = SecondModel.new( :first_model_id => first_instance_id ).save

if first_save && second_save
  # do something
end

【讨论】:

是的,但不幸的是我做不到,看看我的结构——但也许不会有其他方法怎么做...... 那么你的结构不是很清楚......你的前两个“命令”匹配这个答案。为什么不粘贴您的实际代码? 这是我目前的控制器:pastebin.com/UVV8XBXa 以及如何解决这种情况 我还在为一个问题苦苦挣扎...我得到了最后一个插入项目的 ID,但我不知道为什么——我无法将 ID 从第一个表保存到第二个以保存...如果我尝试:puts first_instance_id - 所以我得到一个数字,但这个数字不会保存到数据类型为“int(11) not null”的列中——我也尝试过“first_instance_id.to_i”,但不幸的是没有成功...没有遇到类似问题的人吗?【参考方案2】:

保存模型后,您可以访问它的id变量:

@user = User.new
puts @user.id
# => nil
@user.save
puts @user.id
# => 1

【讨论】:

【参考方案3】:

您可以通过模型中的updated_at 字段搜索您的数据库吗?

获取最新记录:

@model1 = Model1.order("updated_at DESC").limit(1)

或者更好的是,首先保存 Model1:

@model1 = model1.save

分配:

@model2.model1_id = @model1.id

注意:如果您确实想保存特定记录的 ID,查找最后一个并不是最好的方法。

这是因为其他用户可能会在您插入 Model1 之后和调用 Model2 之前插入另一条记录。

如果您希望两者一起保存或根本不保存,您可以查看交易:http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html

如果您在担心 Model2 之前对 Model1 自己保存感到满意,那么只需像我上面所做的那样分配变量。

【讨论】:

以上是关于Rails 3 - 如何从 mysql 表中查找最后插入的 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何从mysql表中查找逗号分隔值

Rails 如何知道何时从 `sessions` 表中删除记录?

对 Rails 3“存储定位器”功能使用 MySQL 空间能力或经纬度查找?

mySQL 查找值的最常见起始字母

如何根据搜索关键字 rails 从 2 个表中获取数据

mysql 如何查找同一表中两行之间的差异并列出不匹配的记录? mysql在表中查找不匹配的行