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!

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top