Pitfall: ActiveRecord callbacks: Method call with multiple conditions
In the following example the method
update_offices_people_count won't be called when
office_id changes, because it gets overwritten by the second line:
after_save :update_offices_people_count, :if => :office_id_changed? # is overwritten … after_save :update_offices_people_count, :if => :trashed_changed? # … by this line
after_save :update_offices_people_count, :if => :office_people_count_needs_update? private def office_people_count_needs_update? office_id_changed? || trashed_changed? end
Or, move the conditions into the callback. This also allows you test the conditions more easily using a unit test:
after_save :update_offices_people_count private def update_offices_people_count if office_id_changed? || trashed_changed? ... end end
Also see the card on testing conditional validations.
Your development team has a full backlog of feature requests, chores and refactoring coupled with deadlines? We are familiar with that. With our "DevOps as a Service" offering, we support developer teams with infrastructure and operations expertise.