【问题标题】:Undo previously seeded data in Rails在 Rails 中撤消先前播种的数据
【发布时间】:2013-02-03 23:45:32
【问题描述】:

我通过编辑db/seed.rb 文件并执行rake db:seed 命令将一行数据播种到我的表中。在不知不觉中,我在该行中输入了一些错误信息。所以我想删除之前添加的数据行。是否有任何类似rake db:rollback for rake db:migrate 的 rake 命令。

【问题讨论】:

  • 删除数据库,重新创建并再次播种。 :)
  • @Sergio Tulentsev:我同意。但是我必须保留在我做最后一粒种子之前已经存在的数据。我只想删除最后的种子数据。你能帮我做吗?
  • 没有 rake 任务。手动查找和删除数据。如果您预计它会再次发生,请编写一个脚本。
  • 这是我不使用种子的原因之一,总是使用迁移脚本来填充您的数据

标签: ruby-on-rails undo seed


【解决方案1】:

这有几个方面:

1:您想在数据库中没有其他数据时更改种子数据:

您应该在更新 seed.rb 文件后简单地重做rake db:seed。在尝试向该模型添加任何内容之前,请确保您拥有 MyModel.delete_all

2:你想更改种子数据,但数据库中还有其他数据

这有点难。通常最简单的做法是使用原始 sql 语句或使用 PhpPpAdminPhpMyAdmin 等工具手动更改数据。


现在,有一种方法可以将它们组合在一起,那就是在 seed.rb 文件中做一些巫术。所以你可以运行rake db:seed deseed=true,然后在你的seed.rb中:

if ENV['deseed'] 
   #Do your deseeding action here
else
   #Do your seeding here.
end

你甚至可以疯狂地做这样的事情:

deseed = ENV['desee']

#DANGER: Dirty hacks upcoming:
deseed? myModelCall = MyModel.method(:destroy_all): myModelCall = MyModel.method(:create)

myModelCall.call :user_id_or_whatevs => 23 #this creates or deletes a MyModel entity with the given parameters
#NOTE this might not work in all cases and I would not necessarily recommend doing this. 

#<3uby

【讨论】:

    猜你喜欢
    • 2016-02-12
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 2021-05-30
    • 2016-12-16
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    相关资源
    最近更新 更多