Rails 3 - как найти последний вставленный ID из таблицы MySQL - PullRequest
1 голос
/ 06 июня 2011

в моем контроллере у меня следующая последовательность команд:

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

И мне интересно, как получить идентификатор элемента, который сразу же вставляется в базу данных ... Я пытался гуглить, но яне могу найти эту информацию ...

Заранее спасибо за подсказки

Ответы [ 3 ]

4 голосов
/ 06 июня 2011
# 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
1 голос
/ 06 июня 2011

После сохранения модели вы можете получить доступ к ее переменной id:

@user = User.new
puts @user.id
# => nil
@user.save
puts @user.id
# => 1
1 голос
/ 06 июня 2011

Не могли бы вы просто выполнить поиск в вашей базе данных по полю updated_at в вашей модели?

Чтобы получить самую последнюю запись:

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

или лучше, после сохранения Model1 в первую очередь:

@model1 = model1.save

Назначить:

@model2.model1_id = @model1.id

Примечание: , если вы действительно хотите сохранить идентификатор конкретной записи, поиск последней не лучший способ.

Это связано с тем, что другой пользователь мог вставить другую запись сразу после того, как вы вставили Model1 и прямо перед вызовом Model2.

Если вы хотите сохранить эти два вместе или нет вообще, вы можете посмотреть транзакции: http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html

Если вы довольны сохранением Model1 самостоятельно, прежде чем беспокоиться о Model2, просто назначьте переменные, как я делал выше.

...