没有使用destroy调用更新Rails数据库ID号

时间:2012-12-07 23:29:04

标签: ruby-on-rails-3 sqlite3-ruby

我是rails的新手,所以也许在destroy上没有更新记录ID。

我使用rails scaffold为产品页面生成MVC。当我通过我的产品/新页面向我的数据库添加条目时,它会在条目中添加一个ID号。当我在浏览器中翻转我的索引视图上的show / edit / destroy链接时,它会给我一个localhost:3000 / products / 1的url链接。现在,如果我通过使用destroy链接删除条目,它会正确删除条目,但现在当我添加另一个条目时,它显示id为2而不是1.为什么它从数据库中删除条目但没有将id重置为1 。

这适用于rails app sqlite3中的内置服务器。

3 个答案:

答案 0 :(得分:4)

Sqlite正在使用序列来确定用于主ID的下一个可用整数。即使您使用最新的记录销毁记录,序列也不会“返回”。他们继续增加。有些数据库一旦达到最大值就会重新启动,有些数据库会出错。

某些数据库将序列与表绑定在一起。然而在某些情况下,序列是他们自己的事情。您可以(如果您愿意)使用序列来获取几个不同表的唯一ID。

检查sqlite的文档以获取详细信息......

答案 1 :(得分:1)

命令rake db:schema:dump将当前环境的架构转储到db / schema.rb。 要重置它或全部删除并再次迁移,您应该使用rake db:setup运行rake db:schema:loadrake db:seed的命令。

其他一些重要的命令是;

rake db:schema:load此命令将架构加载到当前环境的数据库中。

rake db:schema:dump此命令将当前环境的架构转储到db/schema.rb

rake db:setup此命令运行rake db:schema:loadrake db:seed

rake db:reset此命令运行rake db:droprake db:setup

rake db:migrate:reset此命令运行rake db:drop,然后rake db:createrake db:migrate

答案 2 :(得分:0)

你必须rake db:删除你的数据库(删除它),然后rake db:migrate再次创建你的表。