Skip to content

Resolve "Add missing `dependent: :nullify` on User for `has_many: created_projects`"

What does this MR do and why?

See #351064 (comment 1142781154) for more details.

This MR adds the missing dependent: :nullify clause on User model, for the association has_many: :created_projects.

Decision to choose dependent: :nullify over ON DELETE SET NULL has been discussed here.

Without this, currently, whenever a User is destroyed, the user.id of this user still remains in the Project#creator_id column. And hence, project.creator always returns nil and further method calls on project.creator will fail with NoMethodError: undefined method for nil:NilClass

Once we add dependent: :nullify, such associations are nullified in batches, whenever a User is destroyed via the Users::DestroyService class, due to the code here.

We already have ~50k such orphaned Project records, so the next step is to nullify the creator_id column of these records using a post deploy migration: #378477 (closed), which will be done in another MR

Screenshots or screen recordings

Screenshots are required for UI changes, and strongly recommended for all other merge requests.

How to set up and validate locally

Numbered steps to set up and validate the change are strongly suggested.

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Related to #378476 (closed)

Edited by Manoj M J

Merge request reports