Отменить ранее загруженные данные в Rails

Я выложил строку данных в таблицу, отредактировав файл db/seed.rb и выполнив команду rake db:seed. Бессознательно, я ввел неверную информацию в эту строку. Поэтому я хочу удалить ранее добавленную строку данных. Есть ли какая-либо команда rake для того же типа, что и rake db:rollback для rake db:migrate.

Ответ 1

Есть несколько аспектов этого:

1: вы хотите изменить исходные данные, если в базе данных нет других данных:

После обновления файла seed.rb вы должны просто переделать rake db:seed. Убедитесь, что у вас есть MyModel.delete_all, прежде чем пытаться добавить что-либо к этой модели.

2: вы хотите изменить исходные данные, но в базу данных добавлены другие данные

Это немного сложнее. Часто самой простой задачей является ручное изменение данных с помощью либо сырых sql-операторов, либо с помощью таких инструментов, как PhpPpAdmin, PhpMyAdmin и т.д.


Теперь есть один способ взломать это вместе, и это будет делать некоторые вуду в файле 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