Ruby on Rails mysql2 соединение last_id всегда возвращает 0

#mysql #ruby-on-rails

#mysql #ruby-on-rails

Вопрос:

Я использую Rails 5, mysql 5.7, и мне нужно получить последний идентификатор предыдущего оператора insert (который вставляет несколько записей с помощью команды load data infile), и я не хочу просто использовать Model.last.id , поскольку может случиться так, что другой процесс вставил новые записи непосредственно перед тем, как первый процесс запроситlast_id, поэтому я попытался использовать ActiveRecord::Base.connection.raw_connection.last_id , поскольку использует вызов mysql, который работает для каждого соединения, однако этот метод всегда возвращает 0, хотя новые записи вставляются, а первичный ключ автоматически увеличивается. Итак, есть какие-нибудь подсказки?

Комментарии:

1. Вы можете попробовать ActiveRecord::Base.connection.execute("SELECT LAST_INSERT_ID()")

2. действительно, это возвращает правильное значение, однако я не хочу зависеть от этого, поскольку эта команда может измениться с более новой версией mysql, поэтому вместо этого лучше использовать gem, который будет обрабатывать изменения версий.