Okropnie nazywam się i zdaję sobie sprawę, że w mojej aplikacji Rails jest lepszy zestaw nazw dla moich modeli.
Czy istnieje sposób użycia migracji do zmiany nazwy modelu i odpowiadającej mu tabeli?
ruby-on-rails
migration
rails-activerecord
Tylko czytać
źródło
źródło
rake db:migrate
, to się nie powiedzie. Możesz wrócić i zmienić te nazwy podczas migracji, ale to będzie bałagan. Lepiej jest po prostu stworzyć zupełnie nowy model niż zmienić jego nazwę.rake db:schema:load
?rake db:migrate
odradza się uruchamianie w celu skonfigurowania bazy danych od zera, właśnie ze względu na obawy wskazane przez andrew.Odpowiedzi:
Oto przykład:
Musiałem ręcznie zmienić nazwę pliku deklaracji modelu.
Edytować:
W Railsach 3.1 i 4
ActiveRecord::Migration::CommandRecorder
umie odwrócić migracje tabeli zmian nazw, więc możesz to zrobić:(Nadal musisz przejść i ręcznie zmienić nazwę plików).
źródło
git grep -i activit
jest bardzo odkrywczy.W Rails 4 wszystko, co musiałem zrobić, to zmiana def
Zaopiekowano się wszystkimi moimi indeksami. Nie musiałem ręcznie aktualizować indeksów, usuwając stare i dodając nowe.
I działa przy użyciu zmiany do zwiększania lub zmniejszania również w odniesieniu do indeksów.
źródło
Inne odpowiedzi i komentarze dotyczyły zmiany nazwy tabeli, zmiany nazwy pliku i grepowania w kodzie.
Chciałbym dodać jeszcze kilka zastrzeżeń:
Wykorzystajmy przykład z prawdziwego świata: przemianowanie modelu z „Merchant” na „Business”.
źródło
Musisz także wymienić swoje indeksy:
I zmień nazwę plików itp. Ręcznie, jak opisują inne odpowiedzi tutaj.
Zobacz: http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
Upewnij się, że możesz cofnąć i przejść do przodu po napisaniu tej migracji. Może to być trudne, jeśli coś się nie powiedzie i utkniesz w migracji, która próbuje wywołać coś, co już nie istnieje. Najlepiej usuń całą bazę danych i zacznij od nowa, jeśli nie możesz wycofać. Pamiętaj więc, że może być konieczne wykonanie kopii zapasowej.
Ponadto: sprawdź, czy w schema_db nie ma żadnych istotnych nazw kolumn w innych tabelach zdefiniowanych przez has_ lub należy_do, czy coś. Prawdopodobnie będziesz też musiał je edytować.
I w końcu robienie tego bez zestawu testów regresji byłoby szalone.
źródło
Możesz wykonać to polecenie: rails gigration rename_ {old_table_name} do {new_table_name}
po edycji pliku i dodaniu tego kodu do zmiany metody
rename_table: {old_table_name},: {new_table_name}
źródło