2009-10-10 13 views
29

Quizás no estoy utilizando la terminología correcta para Ruby (y si estoy por favor corrígeme), pero Google no me está ayudando en este caso.Llamando al método de clase base desde el método sobrecargado en la subclase

Lo que tengo es una clase (llámalo OrderController) que amplía otra clase (llámala BaseStoreController). En BaseStoreController he definido un before_filter que se utiliza en todo mi sitio, con el pequeño, excepto mi OrderController. En esta situación tan particular, necesitaba definir un before_filter personalizado que necesitara hacer algo de lógica adicional y luego llamar al before_filter definido en mi BaseStoreController.

Lo que no sé es cómo hacer esto.

Aquí es lo que he intentado, pero parece que la palabra clave 'super' no es lo que yo esperaba que fuera:

class BaseStoreController < ActionController::Base 
    before_filter :authorize 

    protected 
     def authorize 
      #common authroization logic here 
     end 
end 

y

class OrderController < BaseStoreController 
    before_filter :authorize 

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

El resultado final de mi código es que el método de autorización en el OrderController está fallando con el siguiente error:

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

Respuesta

56

¿Has intentado llamar? el método de la clase base "authorize" con solo "super" en lugar de "super.authorize"?

+2

wow! Supongo que mi experiencia con otros idiomas me estaba perjudicando en este ... Esperaba que Super fuera una referencia a la clase base ... no una referencia al método de la clase base que estaba ocultando. ¡Eso funcionó como un amuleto, gracias! –

+3

En Ruby, 'super' es una invocación a la versión heredada del método, por lo que llamabas a' autorize' en lo que devuelve, en este caso, 'nil'. –

+0

¿Cómo podría uno realmente hacer referencia a la clase base? – Shayne

Cuestiones relacionadas