Używam Rails 3.2 i posiada migracji, który zawiera kod:Model.reset_column_information nie przeładować kolumny w Rails migracji
add_column :users, :gift_aid, :integer, :default => 2
# reset columns
User.reset_column_information
... code here to load legacy data from sqlite3 database ...
# now create a user with the loaded column data
user = User.create(...other cols...,
:gift_aid => migrated_gift_aid_column_data,
...other cols...)
i dostaję unknown attribute: gift_aid
podczas uruchamiania migracji. User.column_names
pokazuje tę samą listę przed i po połączeniu z numerem reset_column_information
.
Dziwnie, gdy ręcznie upuszczam kolumnę w mysql i ponownie uruchamiam migrację, działa ona zgodnie z oczekiwaniami. Począwszy od pierwszej migracji ponownie z pustą bazą danych i nie działa, więc ma to związek z uruchomieniem wszystkich migracji, a nie pojedynczej.
Mam kilka poprzednich migracji na modelu użytkownika, obie obejmują reset_column_information
i oba działają dobrze.
Jestem naprawdę zarysowania głowę na ten - ktoś ma jakieś pomysły
Myślę, że możesz mieć rację. Faktycznie miałem dwa wywołania do User.reset_column_information w dwóch różnych migracji i to było drugie, które się nie udawało. Naprawiłem to poprzez reorganizację moich migracji, więc miałem tylko jedno połączenie z "reset_column_information" (ponieważ muszę jeszcze w końcu wdrożyć stronę, aby nie było problemu z powrotem). To rozwiązanie wygląda na to, że może również działać. Sprawdzę to, jeśli dostanę szansę. – Iain
Mogę potwierdzić, że to dobrze. Wygląda na to, że przy długich migracjach i wielu zmianach w modelu działa tylko pierwsza "reset_column_information". Wyczyszczenie pamięci podręcznej schematu sprawia, że działa dobrze! Dzięki :) – Iain
Dziękuję bardzo! To doprowadzało mnie do szału, ponieważ doktorzy Railsów wyraźnie piszą coś innego -> http://guides.rubyonrails.org/migrations.html#using-models-in-your-migrations – hrdwdmrbl