2013-03-13 69 views
0

一個新創建的對象我想獲得一個對象的ID創建後,像這樣:參考Rails中

post = Post.create_with_data(data) 
post_id = post.id #id of the post object just created in previous line 

然而,POST_ID是nil。我如何實現我的目標?我不想使用Post.last,因爲它可能會在多個用戶同時嘗試創建帖子時創建數據衝突。

謝謝。

回答

3

在你create_with_datasave對象?在保存之前,id爲零。

+0

是的,我做保存對象。我會仔細研究一下,看看爲什麼我沒有找回id。 – AdamNYC 2013-03-13 21:14:32

+0

您是否在檢查以確保保存有效?如果'save'不返回'true',id將爲零。 – 2013-03-13 21:15:33

+0

謝謝理查德。事實證明,我的'create_with_data'只創建但不保存對象。 – AdamNYC 2013-03-13 21:27:33

1

試試這個:

post = Post.create!({attribute: 'value'}) 
post_id = post.id 

我不知道create_with_data做的方法,但它似乎什麼不保存您的文章。

1
class Post < ActiveRecord::Base 
    ... 
    def data=(data) 
    # ... use data here 
    end 
end 

Post.create(data: data) 

它更清潔,它會爲您保存!你的錯誤是因爲create_with_data不是持久的對象(而不是節約,省時無法進行驗證等)

1

Rails的函數返回最後評估聲明。如果您要編寫自己的create_with_data模型方法,則需要返回實際對象。 object.save用在回報truefalse,而不是對象本身。

爲了返回對象(從而訪問其ID指定的方式),只是表達對象本身作爲你的函數的最後一條語句,當你調用該方法會自動返回。

class Post < ActiveRecord::Base 

    def self.create_with_data(data) 
    photo = self.new(data) 
    photo.save 
    photo # returns the photo object 
    end 

end 
+0

感謝您的回答。這非常有幫助。 – AdamNYC 2013-03-13 21:38:25