Отменить ранее заполненные данные в Rails

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


person Rajesh Omanakuttan    schedule 19.02.2013    source источник
comment
Удалите базу данных, создайте ее заново и заполните заново. :)   -  person Sergio Tulentsev    schedule 19.02.2013
comment
@Серджио Туленцев: согласен. Но я должен сохранить данные, которые уже были там до того, как я сделал последнее семя. Я хочу удалить только последние заполненные данные. Не могли бы вы помочь мне сделать это?   -  person Rajesh Omanakuttan    schedule 19.02.2013
comment
Для этого нет рейк-задачи. Найдите и удалите данные вручную. Если вы ожидаете, что это произойдет снова, напишите сценарий.   -  person Sergio Tulentsev    schedule 19.02.2013
comment
это одна из причин, почему я не использую семя, всегда использую сценарий миграции для заполнения ваших данных   -  person sameera207    schedule 19.02.2013


Ответы (1)


В этом есть пара аспектов:

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

Вы должны просто повторить rake db:seed после обновления файла seed.rb. Убедитесь, что у вас есть 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
person Automatico    schedule 19.02.2013