definir o "nome de visão" de um controlador
-
29-10-2019 - |
Pergunta
Eu gostaria de centralizar ações semelhantes de alguns controladores e escrevi um controlador do qual os outros controladores herdam.Isso funciona bem.
# 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
Mas agora eu gostaria de centralizar as visualizações no controlador "base", então se um controlador herdado for chamado, o controller_path usado deve ser o controlador base.
Existe uma maneira de reescrever o nome de um controlador ou controller_path?
Eu olhei a fonte de AbstractController :: Base e descobri que (linha 90)
def controller_path
@controller_path ||= name.sub(/Controller$/, '').underscore unless anonymous?
end
Então, eu só preciso definir @controller_path no meu controlador de base, não é?Isso não muda nada:
#just does the same as above
class EditorController < ApplicationController
@controller_path = 'editor'
def index
render 'index'
end
end
Então, há uma maneira de definir o controller_path manualmente?
muito obrigado antecipadamente!
Solução
droga, eu encontrei sozinho!
Acabei de sobrescrever o método controller_path:
class EditorController < ApplicationController
def controller_path
'editor'
end
#...
end
isso sempre usará o 'editor' da pasta de visualização para qualquer controlador herdado.