2014-12-05 84 views
0

就像標題所說,我試圖獲取剛剛創建的記錄的ID,我試圖在控制檯中獲取它,但ID爲零。Rails 3如何獲取after_create中的當前記錄ID

這是我在after_create

<Unit id: nil, uuid: "9f11be13-8d07-4471-a3bb-f87943966bbd", organization_id: 33, property_id: 430, door_number: "3", created_at: "2014-12-05 13:27:57", updated_at: "2014-12-05 13:27:57", deleted_at: nil, size: "5 1/2", door_number_int: 3, leases_count: 0, tasks_count: 0, notes: nil, state_id: 68, state_tasks_count: 2, current_lease_id: nil, next_lease_id: nil, state_tasks_serie: 1, state_tasks_serie_count: 2, price_asked: #<BigDecimal:7fc79162cb80,'0.123E3',9(18)>, availability_date: nil, comments_count: 0> 

開始了在控制檯自我的打印是否有一種方式來獲得訪問記錄ID?

這是我試過到目前爲止

after_create 
    self.save 
end 

before_save 
    if self.id.present? 
    # do stuff 
    end 
end 

它是不是很漂亮,但它的工作

要回答@MarekLipka:因爲僅創建一次記錄它不會導致無限循環。

我還試圖用:

after_create 
    reload 

    # do stuff if self.id 
end 

,但似乎並沒有工作。

像@PauloFidalgo說,除了after_save方法,我無法獲得id。雖然我很奇怪我可以在第二個before_save中獲得它(由after_create中的保存觸發)。

回答

4

id僅在save上分配,在create上您只是創建骨架對象並給出一些值。

爲了獲取對象的ID就叫object.id

如果你想獲得的ID在after_ *方法的一些原因,你需要使用after_save

after_save {id = self.id} 

您也可以在創建時分配一個ID,但您需要查詢數據庫並在變量中設置值。爲了達到這個目的,你需要在數據庫中使用一個序列來設置這個ID。

+0

我的問題在於我需要修改實際記錄中的某些值。這就是爲什麼我在before_save中做到這一點。 但爲了將另一個元素的新記錄關聯起來,我想在after_create中獲取ID並執行我的操作。 如果我將這個記錄保存在after_save中,會導致無限循環。 如果after_create沒有保存記錄,我怎麼得到我的id在我之前保存由after_create調用? – Incognito 2014-12-05 15:50:10

+0

@Incognito所以你想在創建或編輯記錄時更改關聯? – 2014-12-05 15:56:48

+0

事實上,我想要的是複製與單元關聯的某個記錄,重點是我創建了一個模板單元,當用戶創建它時,它複製默認關聯,這就是爲什麼我正在嘗試它。但做self.tasks << Task.new(taks_to_copy.attribute)似乎並沒有創建關聯時主記錄被保存 – Incognito 2014-12-05 16:08:28