老实说,听起来这并不属于迁移。但是,您可以将以下内容添加到初始化程序中,以使其成为方便的基类方法以作为任务的一部分进行调用:
ActiveRecord::base.class_eval do def self.reset_autoincrement(options={}) options[:to] ||= 1 case self.connection.adapter_name when 'MySQL' self.connection.execute "ALTER TABLE #{self.table_name} AUTO_INCREMENT=#{options[:to]}" when 'PostgreSQL' self.connection.execute "ALTER SEQUENCE #{self.table_name}_id_seq RESTART WITH #{options[:to]};" when 'SQLite' self.connection.execute "UPDATE sqlite_sequence SET seq=#{options[:to]} WHERe name='#{self.table_name}';" else end endend然后,只需将以下内容作为任务的一部分运行,或者直接在控制台中运行:
Mytable.reset_autoincrement(:to => 1000)
确保检查此方便的答案,以了解为什么sqlite无法正常工作。
SQLite重置主键字段



