Der Rails Connector ermöglicht es (ab Version 6.7.3), Controller zu definieren, die nur für bestimmte Vorlagen zuständig sind. Einen neuen Controller einzubinden, erfordert keinerlei Konfiguration, abgesehen davon, dass die Controller-Klasse angelegt werden muss.
Mögliche Anwendungsfälle sind:
- Sehr viele Views, die man nach Vorlage gruppieren möchte
- Umschaltung zwischen mehreren Ansichten für eine CMS-Datei
- Auswertung von Session-/Cookie-/Parameter-Daten für bestimmte Vorlagen
- Automatisches Laden des jeweils passenden Helper-Moduls (ohne
helper :all) - Handling von
POST-Requests, beispielsweise für die Realisierung von Formularen über CMS-Dateien - Ausgabe von CMS-Daten in mehreren Formaten, wie XML, HTML, JSON.
Der Rails Connector sucht für jede CMS-Datei, die angezeigt werden soll, nach einem Controller, dessen Name zur Vorlage der Datei passt. CMS-Dateien der Vorlage Publication würden, sobald ein Controller namens PublicationController existiert, der von RailsConnector::DefaultCmsController abgeleitet ist, von diesem ausgeliefert werden. Existiert er nicht, wird stattdessen CmsController verwendet.
Die Standard-Aktion zur Auslieferung einer CMS-Datei bleibt weiterhin index. Zusätzliche Aktionen können angesprochen werden, indem die Obj-Methode controller_action_name überschrieben wird.
Der Rails Connector stellt eine spezielle Testmethode zur Verfügung, um vorlagenspezifische Controller zu testen. Mit der Methode request.for_cms_object kann im Test definiert werden, welches Cms-Objekt geladen werden soll. Hier ein Beispiel für das Testframework rspec:
describe CmsController, "request for HTML document" do
before do
controller.stub!(:ensure_object_is_permitted).and_return(true)
controller.stub!(:ensure_object_is_active).and_return(true)
controller.stub!(:set_google_expire_header).and_return(true)
@obj = mock_model(Obj, :mime_type => 'text/html', :permalink => 'dummy')
request.for_cms_object(@obj)
end
it "should render the view" do
get 'index'
response.should be_success
end
end