acts_as_versioned i automatyczne migracje tabeli z wersjami

Używamy plugina acts_as_versioned, żeby śledzić kolejne zmiany w profilach użytkowników. Przykładowo mamy 2 tabele:

create_table :users do |t| t.string :login, :null => false, :limit => 30 t.string :about_me, :null => false, :limit => 300 end
Do tej tabeli powstaje analogiczna tabela user_versions.
Problem pojawia się, gdy zmieniana jest tabela users, np.:

 change_column :users, :about_me, :null => false, :limit => 400

Trzeba zawsze pamiętać, żeby taką samą zmianę wykonać na tabeli user_versions. Niestety zdarza się, że ktoś wykona migrację na tabeli users, ale zapomni zrobić tego samego na user_versions.

Kto używa tego plugina pewnie spotkał się już z takim problemem. Znaleźliście jakieś rozwiązanie, które pozwoli uniknąć takiej sytuacji? Np. automatyczna migracja tabeli user_versions, jeśli migrowana jest tabela users albo coś w ten deseń.

Bywa to upierdliwe, ale mi zawsze testy podpowiadały, że coś jest nie tak.

Tak testy dobrze wyłapują takie sytuacje, gdy kolumna jest dodawana lub usuwana. W przypadku, kiedy zmieniany jest maksymalny rozmiar varchara trzeba by testować czy przejdzie insert do tej kolumny ze stringiem o maksymalnej długości. Co mi jedynie przychodzi do głowy to zrobienie wrappera na add_column, remove_column oraz change_column i wyłapywanie czy robiona zmiana w głównej tabeli i pociąga za sobą zmianę na tabeli z wersjami.

Warto zobaczyć:
http://railscasts.com/episodes/177-model-versioning

[quote=slawosz]Warto zobaczyć:
http://railscasts.com/episodes/177-model-versioning[/quote]
Dzięki sławosz. Na pierwszy rzut oka wygląda na to, że ten plugin rozwiązuje większość problemów jakie są z acts_as_versioned