2012-08-23 16 views
1

在用我的fixtures測試數據(只有2行/表)無意中覆蓋了〜100行/表的開發數據庫後,每個模型中創建的下一個新對象從id = 897600開始。什麼可能導致在object_ids中跳過

這是什麼原因造成的?這是否意味着我創建了897500測試對象,這些測試對象在我的數據庫中不可見?不知道這是我應該關心的事情,但任何反饋將不勝感激。

我使用PostgreSQL 9.1和Rails 3.2

請讓我知道更多的信息會澄清我的問題是有用的。謝謝!

回答

1

導軌夾具使用夾具鍵的散列值來確定記錄id s。這允許所有的good stuff(這個功能被引入的時候一些舊文章)。爲了讓您的測試運行,在測試示例中創建的記錄不需要與這些哈希ID衝突,因此ActiveRecord將PK序列重置爲max(id)+1,以便使用固定裝置接觸每個表。這就是你的PK可以得到如897600這樣的數字。

+0

謝謝@Serge。所以我明白,這是測試數據庫中的預期行爲。我想這不是在測試數據庫中的問題,因爲該ID沒有可視化引用? – umezo

+0

因此,重置我的開發數據庫中的id號碼的唯一方法是重新啓動rake db:reset? – umezo

+0

這不是測試數據庫中的問題,因爲哈希值是一致的。另一個測試套件的運行不會導致2X碰撞ids。至於開發,是'db:reset'是最簡單的路徑。困難的方法是:手動清理燈具,然後在每個表上發出「ActiveRecord :: Base.connection.reset_pk_sequence!(table_name)」。 –

相關問題