2

我希望能够:

  1. 清空一张表,包括重置主键
  2. 使用 db:seed 用新数据重新填充该表
  3. 保持所有其他表相同,数据完整

我知道通过迁移删除表并在回滚时重新创建它(如此博客文章),这是可能的;但是,如果我在以后的迁移中更改表架构,那么保持更新可能会很烦人。

有没有比上述解决方案更好的方法来实现我正在寻找的 3 种效果,理想情况下是一种直接或通过所有适用迁移的集体影响动态适应已删除表的现有结构的方法?谢谢!


编辑:使用以下答案时可能会帮助其他新人的两件事:

  • 在 create_fixtures 中,我的第一个参数以“#{Rails.root}/test/fixtures”结束——我之前并不知道 Rails.root
  • 对于如何执行基本的自定义 rake 任务,有一个 Railscast
4

1 回答 1

1

您正在考虑使用该rake db:seed任务的正确轨道:

使用固定装置填充表格会清除该表格并重置 id。因此,为了满足您的第一个要求,创建一个 rake 任务来加载专门为您的特殊表创建的夹具文件。我建议使用单独的 rake 任务,rake db:seed因为它使您可以像平常一样自由地使用该任务,并且键入rake db:seed && rake db:special_table_seed.

my_table.yml使用您的表种子数据创建一个单独的 yml 文件

您要在 rake 任务中使用的命令是

require 'active_record/fixtures'

ActiveRecord::Fixtures.create_fixtures("/path/to/the/directory/", "my_table")

至于您最终需要动态适应表结构变化的过程,我没有任何建议 - 抱歉。尝试执行此操作的一种方法是使用迁移来管理它,但通常被认为很难维护,我不推荐它。您最好在每次对结构进行重大更改时评估需要对种子文件进行的更改。

于 2013-02-20T12:29:51.583 回答