Jak dodać wartość domyślną do kolumny, która już istnieje podczas migracji?
Cała dokumentacja, którą mogę znaleźć, pokazuje, jak to zrobić, jeśli kolumna jeszcze nie istnieje, ale w tym przypadku tak jest.
Jak dodać wartość domyślną do kolumny, która już istnieje podczas migracji?
Cała dokumentacja, którą mogę znaleźć, pokazuje, jak to zrobić, jeśli kolumna jeszcze nie istnieje, ale w tym przypadku tak jest.
Oto jak powinieneś to zrobić:
change_column :users, :admin, :boolean, :default => false
Ale niektóre bazy danych, takie jak PostgreSQL, nie aktualizują pola dla wcześniej utworzonych wierszy, więc upewnij się, że zaktualizowałeś pole manaul również podczas migracji.
up
bloku, a nie wchange
bloku. Możesz zostawićdown
blok pusty. Nie przywróci pierwotnego stanu tabeli, ale migrację można przywrócić.źródło
from:
a,to:
jeśli chcesz, aby był odwracalny :)from
ito
został dodany w Railsach 5+ w tym zatwierdzeniu: github.com/rails/rails/pull/20018/filesW przypadku Railsów 4+ użyj
change_column_default
źródło
def change
`add_column: foos,: name, default:" coś dla istniejących wartości "` `change_column_default: foos,: name, default:" "end
change_column_default :products, :approved, from: true, to: false
- ale to też nie działa.Używanie
def change
oznacza, że powinieneś pisać migracje, które są odwracalne. Ichange_column
nie jest odwracalny. Możesz iść w górę, ale nie możesz zejść, ponieważchange_column
jest nieodwracalny.Zamiast tego, chociaż może to być kilka dodatkowych linii, powinieneś użyć
def up
idef down
Więc jeśli masz kolumnę bez wartości domyślnej, powinieneś to zrobić, aby dodać wartość domyślną.
Lub jeśli chcesz zmienić wartość domyślną dla istniejącej kolumny.
źródło
** Szyny 4.X + **
Począwszy od wersji Rails 4 nie można wygenerować migracji w celu dodania kolumny do tabeli z wartością domyślną . Poniższe kroki dodają nową kolumnę do istniejącej tabeli z wartością domyślną true lub false.
1. Uruchom migrację z wiersza polecenia, aby dodać nową kolumnę
Powyższe polecenie doda nową kolumnę do twojej tabeli.
2. Ustaw nową wartość kolumny na PRAWDA / FAŁSZ, edytując nowy utworzony plik migracji.
** 3. Aby wprowadzić zmiany w tabeli bazy danych aplikacji, uruchom następującą komendę w terminalu **
źródło
Wykonać:
Wygeneruje tę migrację:
Ustaw wartość dodaną dodając: default => 1
Biegać:
źródło
Key is not present in table error
.Oto, co możesz zrobić:
EDYCJA: ... ale najwyraźniej jest to błąd Świeżaka!
źródło
before_save