title: Rails Cache Sweeper and Model Callback Firing
body: <p>I have the following classes:</p>
  
  <pre><code>class Vigil &lt; ActiveRecord::Base
    after_update :do_something_cool
  
    private
      def do_something_cool
        # Sweet code here
      end
  end
  
  class NewsFeedObserver &lt; ActionController::Caching::Sweeper
    observe Vigil
  
    def after_update
      # Create a news feed entry
    end
  end
  </code></pre>
  
  <p>Everything works as expected; however, the <code>after_update</code> in the sweeper requires that the <code>do_something_cool</code> method in the model has finished before it can run properly. The problem is that the <code>after_update</code> in the sweeper is being called before (or perhaps at the same time as) the <code>do_something_cool</code> callback and it's causing problems.</p>
  
  <p>Does anyone know how to force the <code>after_update</code> in the sweeper to fire after the model callback? Is there better way to achieve this?</p>
  
  <p><strong>Update/Fix:</strong> As it turns out, unlike the answer below states, the observer callbacks actually ARE firing in the correct order (after the model callbacks). When I discovered this, I realized something else must be wrong.</p>
  
  <p>The <code>do_something_cool</code> method destroys all of a vigil's slots, and replaces them with the correct number of slots with the correct times. The observer relies on the number of slots to figure out how long the vigil should last. So, the underlying problem was that all of the vigil's slots were being destroyed, and that data was cached, so when I called <code>vigil.slots</code> from the observer, it was using the cached (destroyed slots) data. The solution: simply call vigil.slots(true) at the end of <code>do_something_cool</code> to reload/recache the newly created slots!</p>