2011-06-06 27 views
1

在我的控制器我有以下順序:的Rails 3 - 命令如何從MySQL表找到最後插入的ID

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被立即插入到數據庫......我想谷歌搜索,但我無法找到此信息...提前

感謝您的提示

回答

4
# 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 
+0

是的,但不幸的是這個,我不能做什麼,看我的結構 - 但也許不會別的辦法如何做... – user1946705 2011-06-06 19:56:14

+0

你的結構不是很清楚,然後...你的前兩個「命令」匹配這個答案。爲什麼不粘貼你的實際代碼? – 2011-06-06 20:00:03

+0

這裏是我目前的控制器:http://pastebin.com/UVV8XBXa和方式,我如何試圖解決這種情況 – user1946705 2011-06-06 20:06:33

1

你能不能由updated_at現場搜索你的數據庫模型中的?

爲了獲得最新的記錄:

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

或更好,但在擺在首位節能型號1:

@model1 = model1.save 

要分配:

@model2.model1_id = @model1.id 

注:如果您確實想保存特定記錄的ID,找到las噸是不是最好的方式去。

這是因爲另一個記錄可能由不同的用戶插入,在您插入Model1之後並在您調用Model2之前。

如果你希望兩個在一起還是不救,你可以看看交易:http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html

如果你滿意的型號1對自己節約擔心模型2之前,然後簡單地分配變量我在上面做了。

1

保存模型後,您可以訪問它的id變量:

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