Domanda

Vorrei centralizzare azioni simili di alcuni controller e scrivere un controller da cui ereditano gli altri controller.Funziona bene.

# 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

Ma ora vorrei centralizzare le viste su "base" del controller, quindi se viene chiamato un controller ereditario, il controller_path utilizzato dovrebbe essere quello del controller di base.

Esiste un modo per riscrivere il nome di un controller o il percorso_controller?

Ho esaminato il sorgente di AbstractController :: Base e l'ho trovato (riga 90)

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

Quindi devo solo impostare @controller_path dal mio controller di base, vero?Questo non cambia nulla:

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

Quindi esiste un modo per impostare manualmente controller_path?

grazie in anticipo!

È stato utile?

Soluzione

dannazione l'ho trovato da solo!

Ho appena sovrascritto il metodo controller_path:

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

questo utilizzerà mai l '"editor" della cartella di visualizzazione per qualsiasi controller ereditato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top