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
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! –
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'. –
¿Cómo podría uno realmente hacer referencia a la clase base? – Shayne