2011-04-18 11 views
8

मैं अपने आवेदनकैसे ऑन रेल्स 3

@categories = Category.joins(:posts).select('distinct categories.*').order('label') 

में निम्न क्वेरी इस क्वेरी हर पृष्ठ दृश्य पर लोड हो जाता है है रूबी में एक प्रश्न कैश करने के लिए के बाद से श्रेणियों हर पृष्ठ पर प्रदर्शित होते हैं। यह मेरे लिए गन्दा लगता है क्योंकि श्रेणियों की सूची अक्सर अद्यतन नहीं हो रही है। क्या सिर्फ क्वेरी को कैश करने का निफ्टी तरीका है? मैंने कोशिश की है

Category.cache do 
     @categories = Category.joins(:posts).select('distinct categories.*').order('label') 
    end 

लेकिन मुझे अभी भी विकास लॉग में डेटाबेस से हर बार लोड होने वाली क्वेरी दिखाई देती है।

@categories = Rails.cache.fetch('categories', :expires_in => 24.hours) { Category.joins(:posts).select('distinct categories.*').order('label') } 

कौन सा केवल देखने के लिए कि निम्न डेटा ब्लॉक 'श्रेणियों' कैश किए गए और समय सीमा समाप्त नहीं पढ़ा जाएगा:

+1

कैशिंग विकास मोड में डिफ़ॉल्ट रूप से बंद कर दिया है। इसे चालू करने के लिए 'कॉन्फ़िगरेशन/वातावरण/विकास.आरबी'' में देखें। –

+1

@ डगलस एफ शीयरर यह सेटिंग नियंत्रित करती है कि रूबी कक्षाओं को प्रत्येक अनुरोध के साथ कैश किया गया है या फिर से लोड किया गया है, भले ही सक्रिय रिकॉर्ड की क्वेरी कैश सक्षम न हो। –

उत्तर

18

अपने नियंत्रक में, आप की तरह कुछ कोशिश कर सकते हैं। यदि 24 घंटों के बाद समाप्त हो जाए, तो मॉडल से पूछताछ करें और रेल कैश में नया रिकॉर्ड लिखें।

अधिक जानकारी के लिए, मैंने निम्नलिखित guide का पालन किया।

इसे आज़माएं। मैंने यह इस तरह से काम किया है। उम्मीद है की वो मदद करदे।

+0

नोट, यह केवल कुछ कैश स्टोर्स के साथ काम करता है –

4

आप श्रेणियों को प्रदर्शित करने वाले आपके दृश्य टेम्पलेट के हिस्से के लिए खंड कैशिंग का उपयोग कर सकते हैं। इसका मतलब है कि श्रेणियों को कैश स्टोर से परोसा जाएगा और क्वेरी को केवल तब तक निष्पादित किया जाएगा जब तक कि कैश समाप्त नहीं हो जाता है (expire_fragment विधि का उपयोग करके)।

+0

चूंकि खंड कैशिंग रूसी गुड़िया कैशिंग का उपयोग करता है, इसलिए http://stackoverflow.com/a/5712011/61048 में दिए गए समाधान की तुलना में डेटा का निरंतर दृश्य प्रस्तुत करना आसान है। , जो या तो 24 घंटों के भीतर अंतर्निहित डेटा के साथ पुराना हो सकता है, या स्पष्ट रूप से अमान्य होना चाहिए। –

संबंधित मुद्दे