establecer el "nombre de vista" de un controlador
-
29-10-2019 - |
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!
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.