Odpowiedzi:
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.
change_column_default :employees, :foreign, false
from:
a, to:
jeśli chcesz, aby był odwracalny :)
from
i to
został dodany w Railsach 5+ w tym zatwierdzeniu: github.com/rails/rails/pull/20018/files
W przypadku Railsów 4+ użyjchange_column_default
def change
change_column_default :table, :column, value
end
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. I change_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ą.
def up
change_column :users, :admin, :boolean, default: false
end
def down
change_column :users, :admin, :boolean, default: nil
end
Lub jeśli chcesz zmienić wartość domyślną dla istniejącej kolumny.
def up
change_column :users, :admin, :boolean, default: false
end
def down
change_column :users, :admin, :boolean, default: true
end
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.
$ rails generate migration add_columnname_to_tablename columnname:boolean
Powyższe polecenie doda nową kolumnę do twojej tabeli.
class AddColumnnameToTablename < ActiveRecord::Migration
def change
add_column :table_name, :column_name, :boolean, default: false
end
end
$ rake db:migrate
Wykonać:
rails generate migration add_column_to_table column:boolean
Wygeneruje tę migrację:
class AddColumnToTable < ActiveRecord::Migration
def change
add_column :table, :column, :boolean
end
end
Ustaw wartość dodaną dodając: default => 1
add_column: table,: column,: boolean,: default => 1
Biegać:
rake db: migracja
Key is not present in table error
.
Oto, co możesz zrobić:
class Profile < ActiveRecord::Base
before_save :set_default_val
def set_default_val
self.send_updates = 'val' unless self.send_updates
end
end
EDYCJA: ... ale najwyraźniej jest to błąd Świeżaka!
before_save
up
bloku, a nie wchange
bloku. Możesz zostawićdown
blok pusty. Nie przywróci pierwotnego stanu tabeli, ale migrację można przywrócić.