Pregunta

Me gustaría centralizar acciones similares de algunos controladores y escribí un controlador del que heredan los otros controladores.Esto funciona bien.

# calling Configurations#index will render configurations/index.html.erb
# while 'configurations' being the internal controller_path used to look for the view
class ConfigurationsController < EditorController
end

class EditorController < ApplicationController
 def index
  render 'index'
 end
end

Pero ahora me gustaría centralizar las vistas en el controlador "base", por lo que si se llama a un controlador heredado, la ruta_controlador utilizada debería ser la del controlador base.

¿Hay alguna manera de reescribir el nombre de un controlador o la ruta del controlador?

Miré la fuente de AbstractController :: Base y encontré que (línea 90)

def controller_path
  @controller_path ||= name.sub(/Controller$/, '').underscore unless anonymous?
end

Así que solo necesito configurar @controller_path desde mi controlador base, ¿no es así?Esto no cambia nada:

#just does the same as above
class EditorController < ApplicationController
 @controller_path = 'editor'
 def index
  render 'index'
 end
end

Entonces, ¿hay alguna forma de configurar controller_path manualmente?

¡Muchas gracias de antemano!

¿Fue útil?

Solución

¡Maldita sea, lo encontré por mi cuenta!

Acabo de sobrescribir el método controller_path:

class EditorController < ApplicationController
 def controller_path
  'editor'
 end
 #...
end

esto usará el 'editor' de la carpeta de vista para cualquier controlador heredado.

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