Wpis z mikrobloga

W jaki sposób mogę rozwiązać problem z wysypującą się bazą danych, po każdej migracji która dodaje kolumnę do tablicy? Np mam tabelę users, każdy user ma kolumny email i name. Po dodaniu kolumny age, program się sypie, bo nie każdy user ma ma coś w kolumnie age. W takiej sytuacji pozostaje mi tylko restart bazy danych, a chciałbym zachować wszystkie informacje które się w niej znajdują.
#naukaprogramowania #ruby #rubyonrails
  • 12
@VernonRoche:
Co konkretnie się sypie? Migracja? Model i jego walidacje? Widok?
Mozesz w migracji dac defaulta.
Jak zalezy Ci na danych, możesz przygotowac seedy, potem po wyzerowaniu zaladowac je.

Troche za malo konkretow.
zgaduje, że w widoku albo w kontrolerze nie dodałeś user.try(:age), powinieneś dać w migracji, np.: add_column :users, :age, :integer, default: nil Zawsze jak robisz tego typu rzeczy potrzebna jest walidacja - czyli spodziewasz się tego, że tej wartości może nie być, być nil, być pustym strinigem, itd. i kontrolujesz to w jakiś sposób(np.: dając error w formularzu, że wartość nie jest poprawna).
@updater:

user.try(:age),

To ma sens aby przeciwdzialac sytuacji, ze user to nil. To nie ten case.
Jak age jest pusty, to user.age zroci po prostu nila. Widok to powinien lyknąc, chyba ze robi jakies operacje na tym.

add_column :users, :integer, default: nil

Zjadles jeden parametr. Nazwe nowej kolumny.

default: nil

Maslo maslane, Predzej jakies default: 0.
@ragnarokk gdzie widzisz blad w add_column w moim komentarzu? default: 0/nil kto co woli-dalem przyklad jak mozna ustawid jakas wartosc defaultowa. Prawdopodobnie robione sa operacje na tym age i stad ten bug. Autor postu musi dac szczegóły, bo tak to można gdybać.