Dans mon Rails (3.2), il y a beaucoup de tables dans ma base de données, mais j'ai oublié d'ajouter quelques contraintes non nulles. J'ai cherché dans Google mais je ne trouve pas comment écrire une migration qui ajoute non null à une colonne existante.
TIA.
Pour Rails 4+, réponse de nates (utilisez change_column_null ) est préférable.
Pre-Rails 4, essayez change_column .
Vous pouvez également utiliser change_column_null :
change_column_null :table_name, :column_name, false
1) PREMIER: Ajouter une colonne avec la valeur par défaut
2) ALORS: supprimer la valeur par défaut
add_column :orders, :items, :integer, null: false, default: 0
change_column :orders, :items, :integer, default: nil
Si vous l'utilisez sur un nouveau script/schéma create migration, voici comment nous pouvons le définir.
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