library(plyr)
ddply(tbl, .(Category), summarise, sum = sum(Frequency))
Попробуйте PerRequestCache . Я украл дизайн из кэша запросов SQL.
Настройте его в config / environment.rb
с помощью:
config.middleware.use PerRequestCache
, затем используйте его с:
PerRequestCache.fetch(:foo_cache){ some_expensive_foo }
Глобальные переменные являются злыми. Разработайте, как чисто передать данные, которые Вы хотите туда, где Вы хотите использовать их.
Вы рассмотрели флэш-память? Это использует Сессию, но автоматически очищено.
app/models/my_cacher.rb
class MyCacher
def self.result
@@result ||= begin
# do expensive stuff
# and cache in @@result
end
end
end
|| = синтаксис в основном означает, "делают следующее, если @@ результатом является ноль" (т.е. не набор к чему-нибудь уже). Просто удостоверьтесь, что последняя строка в начать/закончить блоке возвращает результат.
Тогда в Вашем views/models/whatever Вы просто сослались бы на функцию при необходимости в нем:
MyCacher.result
Это будет кэшировать дорогое действие на время запроса.