Rails: counter_cache не запускает обратный вызов after_update

StackOverflow https://stackoverflow.com/questions/9399408

  •  29-10-2019
  •  | 
  •  

Вопрос

Итак, у меня есть модели Folder и FolderItem.

< sizesUPDATE родовое слово

Я использую counter_cache, чтобы сохранить количество itens в одной папке.Но папка может быть родительской для другой папки, и я хотел, чтобы в родительской папке была сумма counter_cache всех ее дочерних элементов плюс собственный counter_cache.

Для этого я попытался добавить метод after_update, кэширующий изменения, сделанные в столбце counter_cache, но почему-то этот метод не вызывается при создании нового FolderItem.

Это было полезно?

Решение

Я бы сделал что-то подобное.

Добавить поля счетчика кеша в таблицу папок

родовое слово

И код Ruby

родовое слово

Обратите внимание, что метод Folder#sum_of_children является рекурсивным, поэтому для больших наборов данных он может замедлить работу вашего приложения.Возможно, вы захотите сделать с ним еще немного магии SQL, но в чистом виде Ruby это настолько близко к хорошему решению, насколько это возможно.Я видел, что вы сделали наоборот, это будет так же медленно, как и вам нужно обновляться снизу вверх.(Это сверху вниз)

Не знаю, ищете ли вы это, но это удобочитаемое решение для кэширования количества элементов в папке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top