after_update действительно будет тем, что вам нужно, хотя вполне возможно, что ассоциация уже тогда исчезла.
Я бы посоветовал проверить это предположение, создав after_update, который просто устанавливает на удаленную связь. Если вы все еще можете получить его - тогда хорошо. используйте это, чтобы очистить фрагменты кэша.
в противном случае я бы предложил что-то вроде "обратного" обратного вызова, немного хакерский, но должен получить то, что вам нужно:
в обратном вызове before_update сохраните @variable для ваших ассоциаций, а затем проверьте, изменились ли они в after_update
before_update :save_associations
after_update :expire_old_associations
def save_associations
@associations_to_check = self.widgets
end
def expire_old_associations
diff = @associations_to_check - self.widgets
expire_fragments_for(diff) if diff.present?
end
Смотрите доступные обратные вызовы здесь:
http://apidock.com/rails/ActiveRecord/Callbacks