2012-02-02 16 views
41

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

Odpowiedz

73

Myślę, że to musi być jakiś błąd związany z buforowania schematu ... to może działać:

User.connection.schema_cache.clear! 
User.reset_column_information 

(dla szyn 3.2.2)

+1

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

+1

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

+1

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

Powiązane problemy