Pregunta

Estoy tratando de anular una acción en un controlador definido por un motor Rails.

Parece que necesito solicitar el archivo original antes de volver a abrir la clase, así:

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

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

Esto tiene sentido, pero ese requerimiento es bastante feo. ¿Hay algún tipo de magia de Rails que me permita evitar el requerimiento inicial?

¿Fue útil?

Solución

Esta es una suposición completa ...

Parece más un problema de tiempo de carga. Como en, su archivo se está cargando antes del complemento. ¿Dónde está ubicada tu acción? config / initializers? lib?

No estoy seguro de cuándo se carga Rails Engines, así que juega con la ubicación (debería funcionar poniéndolo en lib).

O, mejor aún, cree su propio complemento con los cambios y asegúrese de que se cargue después del original.

Y probablemente quieras algo más como:

SomeController.class_eval do

  def index
    ...
  end

end
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top