2013-04-19 2 views
0

У меня есть следующий запрос:запроса кэша, если модель не обновляется - рельсы

def home 
    @posts = Post.where(:isGroup => "public").order('created_at DESC').page(params[:page]).per(20) 
end 

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

Когда я использую

expires_in 5.minutes, public: true 

кэширует все действие, а не просто запрос (и портит всю страницу, так как результаты являются началом бесконечной прокрутки, а страница имеет логин) ,

Когда я сделать: Это не похоже

cache "home_post", expires_in: 10.minutes do 
    @posts = Post.where(:isGroup => "public").order('created_at DESC').page(params[:page]).per(20) 
end 

показать любое повышение производительности, а также не обновляется при добавлении новой записи.

Что было бы лучшим способом просто кэшировать запрос?

спасибо.

ответ

0

Вы можете кэшировать объект как есть Rails.cache.write и Rails.cache.read - это то, что вам нужно. Более подробно здесь https://devcenter.heroku.com/articles/caching-strategies#low-level-caching

Чтобы очистить кеш каждый раз, когда создается пост, вы можете использовать after_create, а затем развернуть кеш. Подробнее см. Примеры здесь http://guides.rubyonrails.org/caching_with_rails.html#sweepers

+0

Если я это сделаю, я получаю сообщение об ошибке (TypeError (не может сбрасывать анонимный класс # ): Rails.cache.fetch ("homepage_posts",: expires_in => 5.minutes) @ posts = post.where (: isGroup => "public"). order ('created_at DESC'). page (params [: page]). per (20) end – user749798

+0

Я бы кешировал его таким образом 'Rails.cache. write ("homepage_posts", Post.where (: isGroup => "public"). order ('created_at DESC'). page (params [: page]). per (20) .all) '.' .all' caches записи, а не только активный экземпляр записи. Я бы также прочитал его так же: Rails.cache.read ('homepage_posts') ' – shishirmk

0

Ну, вы также можете caches_action :home, :expires_in => 5.minutes, :layout => false, :public => true, и он будет просто кэшировать запрос и данные, а не макет действия.

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