Rake task for manually running validations across all models and records #2162
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
In the work for #2156, it came up that there are models in the database that violation validations. This can happen when we add a validation, ship it, and then don't load that model into memory. This is one reason why database constraints are stronger than validations (if violated, they'll raise when adding the constraint).
Work in #2160 should help with adding more constraints, but this adds a one-off task for running all validations on all models and records. I'll run this now to verify there are no other gaps, and potentially schedule it to run and raise weekly if anything gets through. This task will probably be quite slow (Rails presence validations for associations trigger queries to verify that the record is present, even if a database foreign key constraint is present). We could speed this up by ensuring we have foreign key constraints (which
immigrant
enforces) and changing Rails presence validations on the association to just be presence validations on the key column, or by replacing uniqueness validations with database constraints, but let's see how long this takes first and if we can just run it weekly.