#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, который будет обрабатывать изменения версий.