【发布时间】:2016-08-20 16:55:04
【问题描述】:
您好,我的 rails 应用程序中有一个种子文件,我在其中销毁所有旧对象以开始,然后创建各种新对象。我希望新对象的 id 为 1,因为所有旧对象都被销毁了,但是正在创建新对象,其 id 高于旧对象的所有 id。举个例子,我有 50 个 Post 对象,它们的 id 都是 1-50。我运行 Post.destroy_all 并创建了 50 多个 Post 对象。所有旧的 Post 对象都被销毁,但新的 Post 对象的 id 都是 51-100。 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
如果我多次运行 rake db:seed,每个对象集合的 id 每次运行都会增加 50。因此,当 ID 为 101 - 150 并且我运行 rake db:seed 并且 ID 现在为 151-200 且不存在 ID 小于 151 的对象时。
在所有记录都被销毁后,如何创建 id 从 1 开始的对象,为什么会出现这种当前行为?
感谢您的帮助。
【问题讨论】:
-
如果您想重新开始,请在桌子上执行 TRUNCATE。仅删除记录不会导致关系数据库中的 ID 重用。
-
如果您像我一样将开发数据库视为丢弃,另一种选择是删除并重新创建。
标签: ruby-on-rails