2013-02-28 4 views
5

मैं तालिका को हटाने के लिए रेल कंसोल में Model.delete_all का उपयोग कर रहा हूं, लेकिन मैंने देखा कि आईडी नंबर रीसेट नहीं होते हैं, वे बस इसे छोड़ देते हैं। मैं एक टेबल कैसे हटा सकता हूं और आईडी को 1 पर वापस शुरू कर सकता हूं?Model.delete_all और ids को 1 पर वापस शुरू करें?

यह वास्तव में एक बड़ा सौदा नहीं है, मैं सिर्फ उत्सुक हूं और सोचता हूं कि यह इस तरह से क्लीनर होगा। धन्यवाद!

+1

समान प्रश्न के बाद: http://stackoverflow.com/questions/2097052/rails-way-to-reset-seed-on- आईडी-फील्ड –

उत्तर

6

अधिकांश डेटाबेस में एक अनुक्रम की अवधारणा होती है जो ऑटो वृद्धि के रूप में उपयोग की जाती है। ActiveRecord प्राथमिक कुंजी बनाने के लिए अंतर्निहित डेटाबेस अनुक्रम का उपयोग करता है। यह मणि (https://github.com/splendeo/activerecord-reset-pk-sequence) आपके डेटाबेस के आधार पर आपके लिए इसे रीसेट करने में मदद कर सकता है।

+0

सही, धन्यवाद! – Andy

1

यह डीबी पर निर्भर करता है। आपके ऐप में आपको इस तथ्य पर भरोसा नहीं करना चाहिए कि आईडी 1 से शुरू होती है और अनुक्रमिक रूप से जाती है, या हमेशा नए रिकॉर्ड के लिए भी बढ़ जाती है। यदि आप एक नया डीबी चाहते हैं, तो आप हमेशा rake db:drop कर सकते हैं, फिर rake db:create

0

एक लाइनर

rake db:drop && rake db:create && rake db:migrate 

व्यापार में वापस

+0

मेरे लिए काम नहीं किया है मुझे उस https://pastebin.com/raw/S3AgciCn – barlop

+0

@barlop का पहला भाग भी चलाने में त्रुटि मिली है, यह उत्तर कुछ साल पहले से है। शायद अन्य उत्तर आपकी मदद कर सकते हैं। यह भी सुनिश्चित करें कि आपका सर्वर नहीं चल रहा है। – AdamT

5

सिर्फ एक तालिका (कॉलबैक के साथ) ड्रॉप करने के लिए और आईडी 1 से शुरू प्राप्त करने के लिए, वहाँ यह करने के लिए रेल में कोई सीधे आगे रास्ता है ।

आप क्या कर सकते हैं

1) Model.destroy_all

2) ActiveRecord::Base.connection.execute("TRUNCATE table_name")

जो अगर है कि तुम क्या जरूरत है, एक एकल तालिका के लिए सभी कि आप चाहते हैं, संभाल लेंगे

3

आप अगर केवल आईडी को रीसेट करने की आवश्यकता है:

ActiveRecord::Base.connection.execute('ALTER TABLE table_name AUTO_INCREMENT = 1') 
1

अगर आप PostgreSQL का उपयोग आप इस कोड को निष्पादित कर सकते हैं

ActiveRecord::Base.connection.reset_pk_sequence!(Model.table_name) यहाँ जवाब के साथ Model.destroy_all

संबंधित मुद्दे