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