Einstellen des "Ansichtsnamens" eines Controllers
-
29-10-2019 - |
Frage
Ich möchte ähnliche Aktionen einiger Controller zentralisieren und habe einen Controller geschrieben, von dem die anderen Controller erben.Dies funktioniert gut.
# 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
Aber jetzt möchte ich die Ansichten auf den "Basis" -Controller zentralisieren. Wenn also ein erbender Controller aufgerufen wird, sollte der verwendete Controller-Pfad der Basis-Controller sein.
Gibt es eine Möglichkeit, einen Controllernamen oder einen Controllerpfad neu zu schreiben?
Ich habe mir die Quelle von AbstractController :: Base angesehen und festgestellt, dass (Zeile 90)
def controller_path
@controller_path ||= name.sub(/Controller$/, '').underscore unless anonymous?
end
Also muss ich nur @controller_path von meinem Basis-Controller aus einstellen, nicht wahr?Dies ändert nichts:
#just does the same as above
class EditorController < ApplicationController
@controller_path = 'editor'
def index
render 'index'
end
end
Gibt es also eine Möglichkeit, den controller_path manuell festzulegen?
Vielen Dank im Voraus!
Lösung
Verdammt, ich habe es alleine gefunden!
Ich habe gerade die controller_path-Methode überschrieben:
class EditorController < ApplicationController
def controller_path
'editor'
end
#...
end
Dies wird immer den Ansichtsordner 'Editor' für jeden ererbenden Controller verwenden.