2012-05-24 13 views
9

ERB के साथ आप तो जैसे एक सूची दृश्य में कैश व्यक्तिगत रिकॉर्ड खंड कर सकते हैं तरल टेम्पलेट:रेल टुकड़ा कैशिंग गाया

<% @items.each do |item| %> 
    <% cache item do %> 
    <%= item.name %> 
    <% end %> 
<% end %> 

इस प्रकार, दूसरी बार सूची में देखा जाता है, प्रत्येक गाया आइटम कैश से लोड किया जाएगा। क्या तरल टेम्पलेट्स का उपयोग करते समय इस दृष्टिकोण का उपयोग करना संभव है? टेम्पलेट की तरह कुछ दिख सकता है:

{% for item in items %} 
    {{ item.name }} 
{% endfor %} 

और साथ गाया:

template = Liquid::Template.parse(template) 
template.render('items' => @items) 

जब यह लूप से अधिक आइटम, मैं कैश हर एक खंड करने में सक्षम होना चाहते हैं। कोई संकेतक?

उत्तर

8

उदाहरण के लिए यदि आप एक प्रारंभकर्ता

class Cacher < Liquid::Block 
    def initialize(tag_name, markup, tokens) 
    super 
    @key= markup.to_s 
    end 

    def render(context) 
    Rails.cache.fetch(@key) do 
     super 
    end 
    end 
end 

Liquid::Template.register_tag('cache', Cacher) 

तब में रखते आप कर सकते हैं

{% cache "some_key" %} 
    ... 
{% endcache %} 

बनें बहुत कैसे आप कैश का निर्माण के साथ सावधान तरल में कस्टम टैग परिभाषित कर सकते हैं कुंजी। आप निश्चित रूप से संघर्ष से बचना चाहते हैं, लेकिन आप शायद यह भी नहीं चाहते कि लोग आपके memcache store (जो यह कोड करता है) से मनमानी कुंजी पढ़ने में सक्षम हो। इस मामले से कैसे मेल खाता है इस पर निर्भर करता है कि आपके ऐप में किसके पास इसका उपयोग है। कैश कुंजी नामस्थान करने के लिए एक रणनीति होगी। कुंजी-नामकरण के बारे में सावधान रहने पर नोट के लिए

+0

+1। किरायेदार (बहु-किरायेदार आवेदन में) तरल टेम्पलेट्स संपादित करने की क्षमता देते समय बहुत महत्वपूर्ण है। –

+0

बहुत बढ़िया जवाब !! बहुत अच्छा काम करता है। बहुत बहुत धन्यवाद। – Ivangrx

+0

बहुत अच्छा, धन्यवाद –

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