मैं प्राथमिक कुंजी मानों को 1 से फिर से शुरू करना चाहता हूं।
जवाबों:
SQLite में सूचकांक / प्राथमिक कुंजी को रीसेट करने के लिए बस टाइप करें:
$ rails console
> ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = 'yourtablename'")
ActiveRecord::Base.connection.execute("DELETE from 'yourtablename'")और यह काम किया क्योंकि यह मुझे एक त्रुटि देगा जो कहा sqlite_sequence where name = 'yourtablename' is not a valid table nameया ऐसा कुछ था।
बहुत सारे लोग (मेरे जैसे) यहां यह जानने के लिए आते हैं कि तालिका के सभी डेटा को कैसे हटाया जाए। हेयर यू गो:
$ rails console
> ModelName.delete_all
या
> ModelName.destroy_all
ru_all निर्भरता और कॉलबैक की जाँच करता है, और इसमें थोड़ा अधिक समय लगता है। delete_all एक सीधी SQL क्वेरी है।
यहाँ अधिक जानकारी: http://apidock.com/rails/ActiveRecord/Base/delete_all/class
मैं तालिका में सब कुछ हटाने के लिए रेल कंसोल से निम्नलिखित का उपयोग कर रहा हूं और फिर सूचकांक काउंटर (रूबी 2 और रेल 4) रीसेट करें:
> ModelName.delete_all
> ActiveRecord::Base.connection.reset_pk_sequence!('plural_model_name')
model_nameरीसेट कमांड में आपके को बहुवचन की जरूरत है, जैसे तालिका का वास्तविक नाम मॉडल का एकवचन नाम नहीं है।
ActiveRecord::Base.connection.reset_pk_sequence!(:plural_model_name):।
4.2 के बाद से आप truncateसीधे ActiveRecord कनेक्शन पर उपयोग कर सकते हैं :
ActiveRecord::Base.connection.truncate(:table_name)
यह सभी डेटा मिटा और autoincrement काउंटर रीसेट करता है तालिका में। MySQL और Postgres में काम करता है , Sqlite में काम नहीं करता है ।
gem 'database_cleaner'अपने Gemfile में जोड़ें , दौड़ें $ bundle install, और फिर:
> DatabaseCleaner.clean_with(:truncation, :only => ['yourtablename'])
आप अधिक तालिकाएँ निर्दिष्ट कर सकते हैं:
> DatabaseCleaner.clean_with(:truncation, :only => ['table1', 'table2', 'table3'])
यदि आप अंतिम पैरामीटर को छोड़ देते हैं, तो यह पूरे डेटाबेस को अलग कर देगा:
> DatabaseCleaner.clean_with(:truncation) # your database is truncated
मैं रेल का उपयोग कर रहा हूँ 4.2.0 और Sqlite3
यहाँ मेरे लिए क्या काम किया गया (उपरोक्त सभी से थोड़ा सा लेना):
$ rails c
> ModelName.delete_all
> ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = 'table_name'")
मैं तब 1 पर वापस शुरू होने वाले सूचकांक के साथ अपनी तालिका में नए रिकॉर्ड जोड़ने में सक्षम था
Person.connection.execute('delete from people' )Person.connection.execute("update sqlite_sequence set seq = 0 where name = 'People'" )