10

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

4

1 回答 1

5

这有几个方面:

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

您应该rake db:seed在更新 seed.rb 文件后简单地重做。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
于 2013-02-19T12:48:04.913 回答