2010-11-26 21 views
9

Çerezlere erişmek ve daha sonra eylem veya kontrol cihazından bağımsız olarak aynı işlemi gerçekleştirmek istiyorum.Çerezlere nasıl erişilir ApplicationController (Rails)

Sayısız eylem yöntemlerimin her birinden çağrılan bir yöntem yazmak istemiyorum çünkü, bir acı olmaktan başka, çok çevik bir kod oluşturmuyor. Application_controller.rb'deki ApplicationController sınıfından (tüm denetleyici sınıfları için süper sınıf) çerez işleme yöntemimi çağırıyorum. Ancak, ApplicationController sınıfının gövdesine cookies() numaralı çağrı, 'tanımlanmamış bir yöntem' hatası getiriyor. (Sanırım bu cookies o zamana kadar tanımlanmıyor.)

Ne yapabilirim? ApplicationController'ın initialize() yönteminin üzerine yazmalı ve oradan benim çerez işleme yöntemimi çağırmalı mıyım? Eğer öyleyse, argümanları süper yapıcıya nasıl iletmeliyim?

P.S. İşinize yarayacak

cookies(:some_key) 

cevap

7

Bu: yerine ...

cookies[:some_key] 

: Ben Rails 2.3.5

2

Bu bir karma değil, bir yöntemidir kullanıyorum

class ApplicationController 
    before_filter :handle_cookies 
    def handle_cookies 
    # Do whatever it is you want to do with your cookies 
    end 
end 

before_filter yöntemi,'den sonra belirttiğiniz altprogramı (:handle_cookies) arayacak 0 bir karma haline getirilmiştir. Bu kodu uygulama denetleyicinize eklemek, diğer tüm denetleyicilerin devraldığı ve aynı işlevi gerçekleştireceği anlamına gelir.

+1

Teşekkürler. Ama aslında bir karma döndüren bir yöntem değil mi? çerezler [: key] '' çerezler için gerçekten kestirme() [: key] '? Ne olursa olsun, bir çözüm bulmama yardım edebilir misin? "Çerezleri" çağırmak ve bir hash beklemek, daha önce aldığım hatayı önlemez. – JellicleCat

+0

Bu, bir CookieJar nesnesini (Hash'den devraldığı) döndüren bir yöntemdir. Tam olarak ne yapmaya çalışıyorsunuz, buna, çerez verilerine değil, yönteme erişmeniz gerekiyor mu? – markquezada

+1

Çerez verilerinin peşindeyim. Sorun, her eylemden çağırmadan ona nasıl erişileceğidir. (Örneğin, bir denetleyicideki bir yöntemden çağırmadan, süper sınıfa nasıl erişebilirim?) – JellicleCat