何時爲created_at字段分配了時間戳?在創建模型對象時,還是在db事務完成時?ActiveRecord created_at並強制執行順序一致性
基本上我想確保我可以依賴數據庫(Postgres)的順序一致性。舉個例子:我有一個聊天系統,用戶通過時間戳獲取新消息(又名 - 給我所有比X更新的消息) - 我想確保用戶看到數據庫的一致快照。
何時爲created_at字段分配了時間戳?在創建模型對象時,還是在db事務完成時?ActiveRecord created_at並強制執行順序一致性
基本上我想確保我可以依賴數據庫(Postgres)的順序一致性。舉個例子:我有一個聊天系統,用戶通過時間戳獲取新消息(又名 - 給我所有比X更新的消息) - 我想確保用戶看到數據庫的一致快照。
ActiveRecord回調after_validation
和before_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)的更多信息。
謝謝!雖然在創建對象後設置時間戳有點奇怪 - 它需要額外保存(到數據庫),並且不能解決一致性問題 – EugeneMi 2014-10-12 16:49:20