diff --git a/lib/active_record_doctor/detectors/missing_non_null_constraint.rb b/lib/active_record_doctor/detectors/missing_non_null_constraint.rb index 5f4283f..a7293e9 100644 --- a/lib/active_record_doctor/detectors/missing_non_null_constraint.rb +++ b/lib/active_record_doctor/detectors/missing_non_null_constraint.rb @@ -32,6 +32,9 @@ def detect model.abstract_class? || sti_base_model?(model) end + # There are no STI child models. + concrete_models = models if concrete_models.empty? + connection.columns(table).each do |column| next if config(:ignore_columns).include?("#{table}.#{column.name}") next if !column.null diff --git a/test/active_record_doctor/detectors/missing_non_null_constraint_test.rb b/test/active_record_doctor/detectors/missing_non_null_constraint_test.rb index 38ecf35..b0f728f 100644 --- a/test/active_record_doctor/detectors/missing_non_null_constraint_test.rb +++ b/test/active_record_doctor/detectors/missing_non_null_constraint_test.rb @@ -187,6 +187,14 @@ def test_optional_columns_validated_by_some_non_sti_models_are_allowed refute_problems end + def test_optional_columns_validated_by_sti_parent_without_child_is_allowed + create_table(:users) do |t| + t.string :type + end.define_model + + refute_problems + end + def test_not_null_check_constraint skip unless postgresql?