एक reset_pk_sequences!
पर विधि ए> . आप इसे कॉल कर सकते हैं और यह इसे max(id) + 1 पर सेट कर देगा, जो शायद आप चाहते हैं।
कुछ परियोजनाओं में मुझे डेटा ETL'ed मिलता है जो सभी मॉडलों के लिए, या किसी निर्दिष्ट मॉडल के लिए ऐसा करने के लिए रेक कार्य को वारंट करने के लिए अक्सर पर्याप्त होता है। यहाँ कार्य है - इसे कुछ Rakefile में या अपने स्वयं के lib/कार्यों के अंतर्गत शामिल करें:
desc "Reset all sequences. Run after data imports"
task :reset_sequences, :model_class, :needs => :environment do |t, args|
if args[:model_class]
classes = Array(eval args[:model_class])
else
puts "using all defined active_record models"
classes = []
Dir.glob(RAILS_ROOT + '/app/models/**/*.rb').each { |file| require file }
Object.subclasses_of(ActiveRecord::Base).select { |c|
c.base_class == c}.sort_by(&:name).each do |klass|
classes << klass
end
end
classes.each do |klass|
next if klass == CGI::Session::ActiveRecordStore::Session && ActionController::Base.session_store.to_s !~ /ActiveRecordStore/
puts "reseting sequence on #{klass.table_name}"
ActiveRecord::Base.connection.reset_pk_sequence!(klass.table_name)
end
end
अब आप इसे rake reset_sequences
का उपयोग करके सभी मॉडलों (RAIS_ROOT/app/models के अंतर्गत परिभाषित) के लिए चला सकते हैं , या किसी विशिष्ट मॉडल के लिए कक्षा के नाम में पास करके।