Redmine's model Project has a method
def close
self_and_descendants.status(STATUS_ACTIVE).update_all :status => STATUS_CLOSED
end
In this method updating with update_all means that when projects are closed callback after_save is not called.
How do you catch (through model) when a project is closed?
Rails 5 allows to update records with callbacks and validations:
For Rails 4 and below you can trigger callbacks by updating records in batches: