2012-05-24 10 views
9

sıvı şablon render. Sıvı şablonlarını kullanırken aynı yaklaşımı kullanmak mümkün mü? Şablon gibi görünebilir:Raylar parçası önbelleğe alma bu kadar böyle bir liste görünümünde önbellek bireysel kayıtları fragmanı edebilirsiniz ERB ile

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

ile render: Bu öğelerin üzerine, ben önbellek her biri parçalamak edebilmek istiyorum döngüler zaman

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

. Herhangi bir işaretçi?

cevap

8

Eğer

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

önbelleği nasıl inşa ile çok dikkat yapabileceği bir başlatıcısı Sonra

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) 

bu koyarsanız Örneğin, sıvı içinde özel etiketler tanımlayabilirsiniz tuşuna basın. Elbette çatışmalardan kaçınmak istersiniz, ancak muhtemelen insanların memcache deposundan (bu kodun yaptığı) keyfi anahtarları okuyabilmelerini istemezsiniz. Bu önemli olan, uygulamanıza kimlerin erişimi olduğuna bağlıdır. Bir strateji, önbellek anahtarlarını adlandırmaktır. Anahtar isimlendirmeye dikkat ederek not için

+0

+1. Kiracılar (çok kiracılı bir uygulamada) verirken Sıvı şablonlarını düzenleme yeteneği çok önemlidir. –

+0

Harika cevap! Harika çalışıyor. Çok teşekkürler. – Ivangrx

+0

Çok hoş, teşekkürler –