W mojej aplikacji Rails (3.2) mam kilka tabel w mojej bazie danych, ale zapomniałem dodać kilka nie zerowych ograniczeń. Przeszukałem go, ale nie mogę znaleźć sposobu na napisanie migracji, która dodaje wartość niezerową do istniejącej kolumny.
TIA.
W mojej aplikacji Rails (3.2) mam kilka tabel w mojej bazie danych, ale zapomniałem dodać kilka nie zerowych ograniczeń. Przeszukałem go, ale nie mogę znaleźć sposobu na napisanie migracji, która dodaje wartość niezerową do istniejącej kolumny.
TIA.
Odpowiedzi:
Dla Rails 4+, odpowiedź natesa (używając change_column_null ) jest lepsza.
Pre-Rails 4, spróbuj change_column .
IrreversibleMigrationco może nie być tym, czego chcesz.
Możesz również użyć change_column_null :
change_column_null :table_name, :column_name, false
1) PIERWSZA: Dodaj kolumnę z wartością domyślną
2) TO: Usuń wartość domyślną
add_column :orders, :items, :integer, null: false, default: 0
change_column :orders, :items, :integer, default: nil
Jeśli używasz go w nowym skrypcie / schemacie tworzenia migracji, tutaj możemy go zdefiniować
class CreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users do |t|
t.string :name, null: false # Notice here, NOT NULL definition
t.string :email, null: false
t.string :password, null: false
t.integer :created_by
t.integer :updated_by
t.datetime :created_at
t.datetime :updated_at, default: -> { 'CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' }
end
end
end
:limitograniczenie), musisz powtórzyć te atrybuty podczas używaniachange_column, w przeciwnym razie zostaną utracone. Z tego powodu wolę używaćchange_column_null