【问题标题】:Rails database ID number not being updated with destroy callRails 数据库 ID 号未通过销毁调用更新
【发布时间】:2012-12-07 23:29:03
【问题描述】:

我是 Rails 新手,所以记录 ID 可能不会在销毁时更新。

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

这是用于 Rails 应用 sqlite3 中的内置服务器。

【问题讨论】:

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


    【解决方案1】:

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

    一些数据库将序列与表联系起来。但是在某些情况下,序列是它们自己的东西。您可以(如果您愿意)使用序列来获取多个不同表的唯一 ID。

    查看 sqlite 的文档了解详情...

    【讨论】:

    • 有没有办法将其重置或全部删除,然后重新迁移我的表。
    • 可能。您需要阅读 Sqlite3 文档以了解如何操作。它因数据库而异。
    【解决方案2】:

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

    其他一些重要的命令是;

    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

    【讨论】:

      【解决方案3】:

      您将不得不 rake db:drop 您的数据库(这会删除它),然后 rake db:migrate 以再次创建您的表。

      【讨论】:

      • 我刚刚做了 rake db:schema:dump,它对我有用。不确定那到底是做什么的。 D
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      • 2016-02-12
      • 2016-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多