2013-02-19 14 views
9

mam wysiane wiersz danych do mojego stolika edytując db/seed.rb plik i wykonując polecenia rake db:seed. Nieświadomie wprowadziłem błędne informacje do tego wiersza. Dlatego chcę usunąć wcześniej dodany wiersz danych. Czy jest jakieś polecenie rake dla tego samego, jak rake db:rollback dla rake db:migrate.Cofnij wcześniej rozstawiony danych w Rails

+2

usunąć bazę danych, odtworzenie i nasion ponownie. :) –

+0

@Sergio Tulentsev: Zgadzam się. Ale muszę przechowywać dane, które już tam były, zanim zrobiłem ostatnie ziarno. Chcę tylko usunąć ostatnie zaimportowane dane. Czy możesz mi pomóc to zrobić. –

+2

Nie ma dla tego zadania rake. Znajdź i usuń dane ręcznie. Jeśli spodziewasz się, że to się powtórzy, napisz skrypt. –

Odpowiedz

3

Istnieje kilka aspektów do tego:

1: Chcesz zmienić dane nasion, gdy nie ma innych danych jest obecna w bazie:

Należy po prostu przerobić rake db:seed po aktualizacji ziarno plik .rb. Przed próbą dodania czegokolwiek do tego modelu upewnij się, że masz MyModel.delete_all.

2: Chcesz zmienić dane nasion, ale są też inne dane dodane do bazy

Jest to nieco trudniejsze. Często najprostszą rzeczą do zrobienia jest, aby ręcznie zmienić dane w postaci surowej SQL sprawozdania lub z wykorzystaniem narzędzi takich jak PhpPpAdmin, PhpMyAdmin itp


Teraz jest possiby jeden sposób hack to razem , a to byłoby zrobić trochę voodoo w pliku seed.rb. Więc można uruchomić rake db:seed deseed=true, następnie w seed.rb:

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

Można nawet dostać prawdziwe szaleństwo i zrobić coś takiego:

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