2013-03-24 3 views
0

У меня в моей программе много функций sum. Я перемещаю все суммы данных в отдельную модель ... позволяет называть ее ... суммами. Это вызовет эти числа быстрее, поскольку я не буду гвоздь базы данных каждый раз, когда мне нужно суммировать много строк.рельсы суммы модели

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

Мне интересно, где я могу создать универсальный метод, который можно вызвать из обратного вызова after_create для любых моделей, которые я выбираю. Сумма связана с учетной записью, которая не является обновляемой моделью. Другими моделями, связанными с учетной записью, являются те, которые попадут в модель сумм. Поэтому мне, вероятно, придется передать self.account_id методу обратного вызова.

Как модель версий Papertrails, которая обновляется каждый раз, когда сохраняется другая модель.

ответ

1

Посмотрите на Statistics драгоценный камень.

Он имеет параметр кеша, который использует кеш-память Rails для предотвращения повторных вызовов агрегации в базу данных.

Я бы предпочел что-то подобное, а не обновлять каждый раз, когда свойство обновляется. Если вы не планируете хранить в памяти модель sums, вам нужно будет запустить столько обновлений в таблице sums, сколько есть актуальных обновлений.

Несмотря на то, что может потребоваться накладные расходы на запись, в отличие от времени чтения, статистика поставляется с другими опциями для оптимизации.

+0

Выглядит отлично. Я попробую. Я думаю, если камень будет кешировать, то это лучший вариант, чем использование отдельной таблицы. Драгоценный камень не обновлялся в течение долгого времени ... есть ли новые или лучшие варианты? – hellion

+0

Знаете ли вы, можете ли вы использовать статистику с ассоциациями? @ user.accounts.statistics (count:: all). У меня много помощников, которые подсчитывают или суммируют ... например, @ rating.flights.sum (: xc). Будет ли использование драгоценного камня statics сделать эти суммы и количество более эффективным? – hellion

+0

[этот пример] (https://github.com/acatighera/statistics#reuse-scopes-you-already-have-defined) использует статистику по ассоциации 'has_many'. Это то, что вам нужно? Что касается эффективности, я боюсь, что не могу обобщить, это довольно субъективно. До сих пор у меня не было жалоб на производительность. –

Смежные вопросы