我是rails的新手,所以也许在destroy上没有更新记录ID。
我使用rails scaffold为产品页面生成MVC。当我通过我的产品/新页面向我的数据库添加条目时,它会在条目中添加一个ID号。当我在浏览器中翻转我的索引视图上的show / edit / destroy链接时,它会给我一个localhost:3000 / products / 1的url链接。现在,如果我通过使用destroy链接删除条目,它会正确删除条目,但现在当我添加另一个条目时,它显示id为2而不是1.为什么它从数据库中删除条目但没有将id重置为1 。
这适用于rails app sqlite3中的内置服务器。
答案 0 :(得分:4)
Sqlite正在使用序列来确定用于主ID的下一个可用整数。即使您使用最新的记录销毁记录,序列也不会“返回”。他们继续增加。有些数据库一旦达到最大值就会重新启动,有些数据库会出错。
某些数据库将序列与表绑定在一起。然而在某些情况下,序列是他们自己的事情。您可以(如果您愿意)使用序列来获取几个不同表的唯一ID。
检查sqlite的文档以获取详细信息......
答案 1 :(得分:1)
命令rake db:schema:dump
将当前环境的架构转储到db / schema.rb。
要重置它或全部删除并再次迁移,您应该使用rake db:setup
运行rake db:schema:load
和rake db:seed
的命令。
其他一些重要的命令是;
rake db:schema:load
此命令将架构加载到当前环境的数据库中。
rake db:schema:dump
此命令将当前环境的架构转储到db/schema.rb
。
rake db:setup
此命令运行rake db:schema:load
和rake db:seed
。
rake db:reset
此命令运行rake db:drop
和rake db:setup
。
rake db:migrate:reset
此命令运行rake db:drop
,然后rake db:create
和rake db:migrate
。
答案 2 :(得分:0)
你必须rake db:删除你的数据库(删除它),然后rake db:migrate再次创建你的表。