diff --git a/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb b/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb index 597cb1cd2fd96d9f65a920a51154c5c046b755a5..a84e13344b700c4b7445b32ffb427c0c66ab3c11 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb @@ -496,6 +496,7 @@ def add_column(name, type, **options) # t.timestamps # t.change # t.change_default + # t.change_null # t.rename # t.references # t.belongs_to @@ -615,6 +616,16 @@ def change_default(column_name, default_or_changes) @base.change_column_default(name, column_name, default_or_changes) end + # Sets or removes a NOT NULL constraint on a column. + # + # t.change_null(:qualification, true) + # t.change_null(:qualification, false, 0) + # + # See {connection.change_column_null}[rdoc-ref:SchemaStatements#change_column_null] + def change_null(column_name, null, default = nil) + @base.change_column_null(name, column_name, null, default) + end + # Removes the column(s) from the table definition. # # t.remove(:qualification) diff --git a/activerecord/test/cases/migration/change_table_test.rb b/activerecord/test/cases/migration/change_table_test.rb index 5a691b4ac3fc97489e2f7627f2d251b8b88c89aa..370f3f3d549c3f2b9a7235e1ce869ded1728d515 100644 --- a/activerecord/test/cases/migration/change_table_test.rb +++ b/activerecord/test/cases/migration/change_table_test.rb @@ -281,6 +281,13 @@ def test_change_default_changes_column end end + def test_change_null_changes_column + with_change_table do |t| + @connection.expect :change_column_null, nil, [:delete_me, :bar, true, nil] + t.change_null :bar, true + end + end + def test_remove_drops_single_column with_change_table do |t| if RUBY_VERSION < "2.7"