我在Rails控制檯中使用Model.delete_all來刪除一個表,但我注意到,這些id號不會重置,它們只是從停止的地方開始。如何刪除表格並使ID從1開始?Model.delete_all並讓ID開始回到1?
這實際上並不是什麼大不了的事情,我只是好奇而已,認爲這樣會更清潔。謝謝!
我在Rails控制檯中使用Model.delete_all來刪除一個表,但我注意到,這些id號不會重置,它們只是從停止的地方開始。如何刪除表格並使ID從1開始?Model.delete_all並讓ID開始回到1?
這實際上並不是什麼大不了的事情,我只是好奇而已,認爲這樣會更清潔。謝謝!
大多數數據庫都有一個序列的概念,它可以在使用時自動遞增。 ActiveRecord使用底層數據庫序列來創建主鍵。這個寶石(https://github.com/splendeo/activerecord-reset-pk-sequence)可能會幫助您重置它,具體取決於您的數據庫。
完美,謝謝! – Andy 2013-03-01 04:38:19
這取決於數據庫。在你的應用程序中,你不應該依賴這樣一個事實,即ID以1開始並順序執行,或者甚至總是增加新記錄。 如果你想要一個新的數據庫,你總是可以做rake db:drop
,然後rake db:create
。
要刪除只是一個表(與回調),並獲得的ID從1開始,有在軌道做沒有直接的方法。
你可以做
1)Model.destroy_all
2)ActiveRecord::Base.connection.execute("TRUNCATE table_name")
將處理所有你想要的,爲單一的表,如果這就是你所需要的
如果你只需要重置ID:
ActiveRecord::Base.connection.execute('ALTER TABLE table_name AUTO_INCREMENT = 1')
如果您使用PostgreSQL可以執行該代碼
ActiveRecord::Base.connection.reset_pk_sequence!(Model.table_name)
後,在這裏與答案Model.destroy_all
類似的問題:http://stackoverflow.com/questions/2097052/rails-way-to-reset-seed-on- id-field – 2017-02-14 05:43:41