2009-10-10 23 views
29

Belki de Ruby için doğru terminolojiyi kullanmıyorum (ve eğer lütfen beni düzeltirseniz), ancak Google sadece bana bu konuda yardımcı olmuyor.Alt sınıftaki aşırı yüklenmiş yöntemden temel sınıf yöntemini çağırma

Elimde başka bir sınıfı (buna BaseStoreController çağrısı) genişleten bir sınıf (OrderController olarak adlandırın) var. BaseStoreController içinde sitemde kullanılan bir adet before_filter tanımladım. Bu çok özel durumda, ek bir mantık yürütmesi gereken bir özel before_filter tanımlamak ve daha sonra BaseStoreController içinde tanımlanmış olan before_filter'u tanımlamak gerekiyordu.

Bilmediğim şey bunun nasıl yapılacağıdır. İşte

ne denedim, ama 'süper' anahtar kelime Olmasını bekliyordum değil ne olduğunu görüntülenir:

class BaseStoreController < ActionController::Base 
    before_filter :authorize 

    protected 
     def authorize 
      #common authroization logic here 
     end 
end 

ve

class OrderController < BaseStoreController 
    before_filter :authorize 

    protected 
     def authorize 
      #additional authroization logic here 
      super.authorize 
     end 
end 

Sonuçta kodumun OrderController'daki yetkilendirme yönteminin aşağıdaki hatayla başarısız olması:

 
You have a nil object when you didn't expect it! 
The error occurred while evaluating nil.authorize 

cevap

56

Arama yapmayı denediniz mi? Temel "authorize" yöntemi "super.authorize" yerine "super" ile mi?

+2

Vay canına! Diğer dillerdeki deneyimlerim bana bu konuda zarar verdiğini sanıyordum ... Üssü beklediğim temel sınıf yöntemine bir referans olarak değil, temel sınıfa referans olması için süper bekledim. Bu bir çekicilik gibi çalıştı, teşekkürler! –

+3

Ruby'de 'super', yöntemin devralınan sürümüne yapılan bir çağrıdır, bu yüzden geri gönderilen her ne olursa olsun 'yetkilendir' kelimesini çağırdınız - bu durumda,' nil'. –

+0

Temel olarak nasıl bir temel sınıf referans olur? – Shayne

İlgili konular