class MyModel
after_commit :api_call_and_update, on: :create
...
def api_call_and_update
# Some call to an API service
self.update(attribute_one: 'New Value')
end
The above will result in a Stack level too deep
error.
The create
lifecycle ends only when the last callback has finished. This means any update
on the model will lead to an infinite loop, as the on: :create
callbacks will be fired again since the initial create cycle hasn't finished (thus it's not considered an update
but still create
.
One way to avoid this is to use update_columns
instead, which bypasses callbacks and validations.
This Github Issue Show archive.org snapshot has more information.
Posted by Greg to Ruby on Rails (2017-06-26 23:50)