我只想使用Ruby的续集获取last_insert_id():
insertret = @con.run("INSERT INTO `wv_persons` ( `id` ) VALUES ( NULL )")
pp insertret.inspect # returns "nil", expected that..
last_insert_id = @con.run("SELECT LAST_INSERT_ID() AS last_id;")
pp last_insert_id.inspect # returns "nil", should be an ID
SELECT查询应返回last_id,但.run不返回它。我应该使用什么方法?
解决方案:(感谢Josh Lindsey)
last_insert_id = @con[:wv_persons].insert({})
last_insert_id = last_insert_id.to_s
puts "New person ["+ last_insert_id +"]"
答案 0 :(得分:7)
答案 1 :(得分:5)
实际上,Database#insert无法保证返回最后插入记录的ID。
从文档中:“...将值插入到关联的表中。返回的值通常是插入行的主键值,但这取决于适配器。 强>“
答案 2 :(得分:1)
续集宝石应该返回新插入记录的ID ,但正如其他人所说:
我也想补充......
你可以通过使用#returning
方法确切地告诉续集应该返回什么来解决这个问题。
例如:
DB[:posts].returning(:id).insert(category_id: 5, id: 1, ...)
将返回[{id: 1}]
和
DB[:posts].returning(:id, :category_id).insert(category_id: 5, id: 1, ...)
将返回[{id: 1, category_id: 5}]