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!

Foi útil?

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.

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