Pergunta

Eu estou tentando substituir uma ação em um controlador definido por um Rails Engine.

Parece que eu preciso para exigir que o arquivo original antes de reabrir a classe, assim:

require File.join(RAILS_ROOT, 'vendor/plugins/myplugin/app/controllers/some_controller')
class SomeController

  def index
    render :text => 'this is my index'
  end
end

Isso faz sentido, mas que necessita é muito feio. Existe algum tipo de Rails mágica que me permitiria evitar exigir a inicial?

Foi útil?

Solução

Esta é uma suposição completa ...

Parece mais um problema de carga timing. Como em seu arquivo está sendo carregado antes do plug-in. Onde está sua ação localizada? config / initializers? lib?

Eu não tenho a certeza de quando Rails Engines é carregado de modo brincar com a localização (deve funcionar, colocando-o em lib).

Ou, ainda melhor, criar seu próprio plug-in com as mudanças e garantir que ele carrega após o original.

E você provavelmente vai querer algo mais parecido com:

SomeController.class_eval do

  def index
    ...
  end

end
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top