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?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top