在销毁所有记录之后,为什么创建的新对象的id高于旧的最后一个记录的id?

srl*_*020 1 ruby-on-rails

嗨我在我的rails应用程序中有一个种子文件,我在其中销毁所有旧对象以启动,然后创建各种各样的新对象.我希望创建新对象的id为1,因为所有旧对象都被销毁,但是使用高于旧对象的所有id的id创建新对象.因此,举个例子,我有50个Post对象,id为1-50.我运行Post.destroy_all并创建了50个Post对象.所有旧的Post对象都被销毁,但新的Post对象都具有51-100的id.Post.find(1)不存在.

这是我的种子文件:

Photo.destroy_all
Post.destroy_all
Like.destroy_all

50.times do 
  Photo.create(name: Faker::Name.name)
end


50.times do 
  Post.create(body: Faker::Lorem.paragraph)
end


def get_parent
  resource = [Post, Photo].sample
  parent = resource.all.sample
  parent
end


150.times do 
  parent = get_parent
  Like.create(likeable_type: parent.class.name, likeable_id: parent.id)
end
Run Code Online (Sandbox Code Playgroud)

如果我多次运行rake db:seed,每次运行时每个对象集合的ID会高出50.所以当id为101 - 150并运行rake db:seed时,id现在为151-200,没有任何对象存在且id小于151.

如何在销毁所有记录后创建具有从1开始的ID的对象,以及为什么我得到此当前行为?

谢谢您的帮助.

Pre*_*asz 5

你应该在destroy命令行之后在种子文件中写这个:

ActiveRecord::Base.connection.reset_pk_sequence!('photos')
Run Code Online (Sandbox Code Playgroud)