Forse sto semplicemente non usando la terminologia corretta per Ruby (e se io sono per favore correggetemi), ma Google proprio non mi sta aiutando in questo.chiamata metodo della classe base da metodo di overload in sottoclasse
Quello che ho è una classe (lo chiamano OrderController) che si estende un'altra classe (lo chiamano BaseStoreController). Nel BaseStoreController ho definito un before_filter
utilizzato nel mio sito, con il piccolo ad eccezione del mio OrderController. In questa stessa situazione particolare avevo bisogno di definire una consuetudine before_filter
che ha bisogno di fare un po 'di logica addizionale e quindi chiamare il before_filter
definito nel mio BaseStoreController.
Quello che non so è come fare questo.
Ecco quello che ho provato, ma sembra che la parola 'super' non è quello che mi aspettavo che fosse:
class BaseStoreController < ActionController::Base
before_filter :authorize
protected
def authorize
#common authroization logic here
end
end
e
class OrderController < BaseStoreController
before_filter :authorize
protected
def authorize
#additional authroization logic here
super.authorize
end
end
Il risultato finale del mio codice è che il metodo di autorizzazione in OrderController non riesce con il seguente errore:
You have a nil object when you didn't expect it! The error occurred while evaluating nil.authorize
Eeeek !!! Credo che la mia esperienza con altri linguaggi mi stava danneggiando su questo ... mi aspettavo super per essere un riferimento alla classe di base ... non un riferimento al metodo della classe base mi nascondevo. Che ha funzionato come un fascino, grazie! –
In Ruby, 'super' è una chiamata alla versione ereditata del metodo, quindi chiamavi' authorize' su qualunque cosa restituisse - in questo caso, 'nil'. –
Come si fa effettivamente riferimento alla classe base? – Shayne