2016-03-23 14 views
1

Rails web uygulamasında çok basit/yaygın bir kullanım olduğunu düşündüğüm noktada takılıyorum. "Caches_action, layout: false" komutunu kullanmak ve platforma göre eylem tarafından ayarlanacak dinamik etiketler (görünümden veya denetleyiciden) görüntülemek istiyorum.Rails caches_action layout ile nasıl kullanılır: false ve meta etiketleri dinamik olarak değiştir?

Ben caches_action ile çalışmıyor content_for olarak bunu yapmak için herhangi bir standart raylar yol bulamadı

, örnek değişkenler (?) Önbelleğe alınmaz ve ben denedim meta yardımcı taşlar (metamagic ve meta-tags) Bu kullanım alanını desteklemeyin.

Bunu yapmanın bir yolu var mı?

Örnek I caches_action, düzen kullanıyorum

: Bir SandboxController # gösteri yönteminin

#app/controllers/sandbox_controller.rb 
class SandboxController < ApplicationController 

    caches_action :show, layout: false, expires_in: 1.minute 

    def show 
    @meta_title = "Best page ever" 
    do_some_expensive_operation 
    end 

end 

üzerinde görünümü yanlış

#app/views/sandbox/show.html.erb 
We are in show action. 

düzen

#app/views/layouts/application.html.erb 
<title><%= @meta_title %></title> 
Debug: <%= @meta_title %> <br/> 
<%= yield %> 

Teşekkür !

cevap

1

Çalışmasını sağlamanın bir yolunu buldum. Olmak istediğim kadar güzel değil ama caches_action kullanılmasına ve HTML meta etiketlerinin görünümden ayarlanmasına yardımcı oluyor. Ben sadece bir before_action ekleyin:

Ayrıca kayıt için, unutulmuş ve boru hattı derinlerde gömülü, ben any recent mentions of this problem bulamadık olarak, sadece o caches_action ve birlikte are not expected to work.

Çözüm content_for olduğu görünüyor meta etiketleri mümkün olduğunca az hesaplama kullanarak ayarlayın.

#app/controllers/sandbox_controller.rb 
class SandboxController < ApplicationController 

    caches_action :show, layout: false, expires_in: 1.minute 
    before_action :seo_show, only: :show 

    def seo_show 
    @meta_title = "Best page ever" 
    end 

    def show 
    do_some_expensive_operation 
    end 

end 

O çok metamagic taş ile birlikte kullanılabileceğini belirtmek gerekir.

Düzen:

#app/views/layouts/application.html.erb 
<%= default_meta_tags && metamagic %> 
<%= yield %> 

Ve yardımcı: Bu birilerinin yardımcı olur

#app/helpers/application_helper.rb 
module ApplicationHelper 

    def default_meta_tags 
    meta title: @meta_title || "Default meta-title of my website" 
    end 
end 

Umut!

İlgili konular