2014-10-12 49 views
0

何時爲created_at字段分配了時間戳?在創建模型對象時,還是在db事務完成時?ActiveRecord created_at並強制執行順序一致性

基本上我想確保我可以依賴數據庫(Postgres)的順序一致性。舉個例子:我有一個聊天系統,用戶通過時間戳獲取新消息(又名 - 給我所有比X更新的消息) - 我想確保用戶看到數據庫的一致快照。

回答

0

ActiveRecord回調after_validationbefore_create可以用來測試這個。

當你創建一個新的模型對象,該created_at場是零的after_validation回調過程中,但before_create回調,這表明created_at時間戳記錄之前的模式實際上是保存到數據庫中存在(但經過模型級驗證發生)。

看起來好像您可以通過設置config.active_record.record_timestamps = false來覆蓋默認導軌行爲。然後,您可以在您想要的過程中的任何點上分配created_at字段。希望這有助於回答你的問題!

下面是關於時間戳(http://api.rubyonrails.org/classes/ActiveRecord/Timestamp.html)和回調(http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html)的更多信息。

+0

謝謝!雖然在創建對象後設置時間戳有點奇怪 - 它需要額外保存(到數據庫),並且不能解決一致性問題 – EugeneMi 2014-10-12 16:49:20