0
create table foo (id auto increment primary key, name varchar(255))

我编写了一个简单的 rails 迁移脚本,self.upself.dropdelete(:id => 1). 如果我执行 db:migrate 它会创建一个 id=1 的新条目,如果我回滚它会被删除。如果我在使用主键 id=2 创建记录时再次迁移/删除,并且我的删除脚本在回滚时失败,则会出现问题。

每次主键都相同是非常重要的,因为我有基于它的其他依赖项。处理这个问题的正确方法应该是什么。

4

3 回答 3

2

您不应该使用迁移来添加种子数据,db/seed.rb而是使用该文件。这将在您这样做时重新安装您的种子数据rake db:reset,这还将重置您的 id 计数器,因此数据将具有可预测的 id。通过迁移添加的数据在执行时不会重新加载rake db:reset

于 2011-12-02T08:37:18.687 回答
0

I think the right way to handle it is dropping the table instead of deleting records. As you create the table in your self.up method you can perform a drop on it.

 def down
    drop_table :system_settings
  end
于 2011-12-02T08:27:04.127 回答
0

执行此操作的是AUTO_INCREMENTMySQL 中的选项。我认为ActiveRecord不允许您将其关闭。但是,您可以通过删除 MySQL 中 id 字段的值来关闭它AUTO_INCREMENT(您必须为此执行 MySQL 查询。)

再三考虑,您正在数据库中维护一些孤立记录。我不相信这是正确的做法。尝试在正确设置模型的 Rails 控制台中删除这些东西,以便在删除母记录时删除相关记录,然后使用一些 rake 脚本或其他东西再次添加数据并设置所需的关联。

于 2011-12-02T08:40:28.500 回答