一個新創建的對象我想獲得一個對象的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
,因爲它可能會在多個用戶同時嘗試創建帖子時創建數據衝突。
謝謝。
一個新創建的對象我想獲得一個對象的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
,因爲它可能會在多個用戶同時嘗試創建帖子時創建數據衝突。
謝謝。
在你create_with_data
你save
對象?在保存之前,id
爲零。
試試這個:
post = Post.create!({attribute: 'value'})
post_id = post.id
我不知道create_with_data
做的方法,但它似乎什麼不保存您的文章。
class Post < ActiveRecord::Base
...
def data=(data)
# ... use data here
end
end
Post.create(data: data)
它更清潔,它會爲您保存!你的錯誤是因爲create_with_data不是持久的對象(而不是節約,省時無法進行驗證等)
Rails的函數返回最後評估聲明。如果您要編寫自己的create_with_data
模型方法,則需要返回實際對象。 object.save
用在回報true
或false
,而不是對象本身。
爲了返回對象(從而訪問其ID指定的方式),只是表達對象本身作爲你的函數的最後一條語句,當你調用該方法會自動返回。
class Post < ActiveRecord::Base
def self.create_with_data(data)
photo = self.new(data)
photo.save
photo # returns the photo object
end
end
感謝您的回答。這非常有幫助。 – AdamNYC 2013-03-13 21:38:25
是的,我做保存對象。我會仔細研究一下,看看爲什麼我沒有找回id。 – AdamNYC 2013-03-13 21:14:32
您是否在檢查以確保保存有效?如果'save'不返回'true',id將爲零。 – 2013-03-13 21:15:33
謝謝理查德。事實證明,我的'create_with_data'只創建但不保存對象。 – AdamNYC 2013-03-13 21:27:33