Devo richiedere il file originale per sovrascrivere il controller da Rails Engine?
-
22-07-2019 - |
Domanda
Sto cercando di sovrascrivere un'azione in un controller definito da un motore Rails.
Sembra che sia necessario richiedere il file originale prima di riaprire la classe, in questo modo:
require File.join(RAILS_ROOT, 'vendor/plugins/myplugin/app/controllers/some_controller')
class SomeController
def index
render :text => 'this is my index'
end
end
Questo ha senso, ma ciò che richiede è piuttosto brutto. Esiste una sorta di magia di Rails che mi consentirebbe di evitare il requisito iniziale?
Soluzione
Questa è un'ipotesi completa ...
Sembra più un problema di temporizzazione del carico. Come in, il tuo file viene caricato prima del plug-in. Dove si trova la tua azione? config / inizializzatori? lib?
Non sono sicuro quando Rails Engines viene caricato, quindi gioca con la posizione (dovrebbe funzionare inserendolo in lib).
O, ancora meglio, crea il tuo plug-in con le modifiche e assicurati che si carichi dopo l'originale.
E probabilmente vuoi qualcosa di più simile a:
SomeController.class_eval do
def index
...
end
end