View

-Action View
-Buildertemplates
-RHTML-Templates
-Layouts / Partials
-Helper


Action View

Nachdem die Datenvorhaltung erläutert wurde, kommen wir nun zum "V" von MVC. Das "V" steht hierbei für die Views, sie sind in Rails als Action Views bekannt. Ein Action View ist ein Verbund aus einem Template, den vom aufrufenden Controller bereitgestellten Umgebungvariablen und Formatierungshelfern.

Templatekonventionen
URL:		http://.../blog/list
Template:	app/views/blog/show[.rhtml | .rxml]
Helper:		BlogHelper
Helper-Pfad:	app/helpers/blog_helper.rb 

[top]

Buildertemplates

Buildertempaltes dienen der Erzeugung von strukturierten Texten, u.a. XML-Dokumenten. Diese Templateart wird durch die Endung .rxml gekennzeichnet und ermöglicht es beliebig komplexe XML-Dokumente zu erzeugen. Verwendet wird dabei die Ruby Bibliothek Builder, auf welcher in ihrer Gesamtheit hier nicht eingegangen werden soll. Zur Vollständigkeit ein kleines Beispiel:
Das Tempalte
Der Output
<example lang="rails">
 <name>an Example</name>
 <line> 
  <linenumber>1</linenumber>
  <content>foo</content>
 </line>
 <line> 
  <linenumber>2</linenumber>
  <content>bar</content>
 </line>
</example>

[top]

RHTML-Templates

Durch seine Auslegung als Webframework ist der bevorzugte Outputtyp von Rails XHTML, welches auf XML aufsetzt. Das legt die Verwendung von Buildertemplates nahe. Daher die Frage: Wozu wird dann die RHTML-Tempaltes benötigt?
Sie vereinfachen das Erstellen von XHTML-Dokumenten, indem einfach ein fertiges XHTML-Dokument als Ausgangsmaterial verwendet werden kann, ein Beispiel hierfür:
XHTML (statisch)
<h1>Ein String</h1>
<p> Ein anderer String </p>

RHTML (dynamisch)
<h1><%= @params.einString %></h1>
<p> <%= @params.EinAndererString %> </p>
Wie zu erkennen ist, wurden die statischen Teile im XHTML durch ein "<%= ... %>" ersetzt. ähnlich wie bei den „Java Server Pages" wird der umschlossene Ruby-Code ausgewertet und das Ergebnis als String in das Template integriert. Da jeglicher Code ausgewertet wird, kann theoretisch auch erst hier die Verarbeitung der params des Controllers implementiert werden, was jedoch nicht mit der Trennung der einzelnen Bereiche der MVC-Architektur einhergeht. Ein weiteres Problem wäre es, das zwingend ein String ausgegeben werden muss.
Manchmal ist dennoch ein wenig Logik für die Ausgabe, z.B. in Form einer Ausgabeschleife für Datensätze, notwendig. Deshalb existiert noch ein zweiter Ausdruck, dessen umschlossener Code wird nur ausgeführt/verarbeitet und keinen Output erzeugt: "<% ... %>".

Listenerzeugung in RHTML
Interpretiert wird dies von Rails wie folgt: Mittels dieser Vorgehensweise und unter der Verwendung von Bedingtenverzweigungen, kann ein Template sehr flexibel auf alle erdenklichen Bedingungen der Controllerumgebung reagieren und so eine optimale Darstellung garantieren.
[top]

Layouts / Partials

Layouts
Die bis jetzt betrachteten Templates stellen für sich gesehen nur den dynamischen Teil einer Webseite dar und müssen somit von einem anderen Template umschlossen sein. Dies macht auch Sinn, da sich diese Template nicht dynamisch ändern. Typsicherweise ist ein Layout, wiederrum ein Template und wie folgt aufgebaut:
app/views/layouts/newslist.rhtml Wichtig ist hierbei die Zeile <%= yield %>, sie sorgt dafür, dass zusätzlich zum Rendern des Layouts noch das Tempalte der aktuellen Methode gerendert wird. Durch das "<%=" wird dieses Ergebnis automatisch in das Layout integriert.
Auch bei dem Einbinden des Layouts für einen Controller ist Rails dank seiner Konventionen in der Lage das gewünschte Layout automatisch zu integrieren. Hierzu sucht Rails im Verzeichnis nach "app/views/layouts/controllerName.rhtml".
Manuelle Festlegung des Layouts
Partials
Durch den DRY-Ansatz von Rails ist es auch möglich für eine bestimmte Aufgabe/ein bestimmtes Model ein eigenes Template anzulegen. Dieses kann dann z.B. für das Editieren, sowie für das Neuanlegen eines Datensatzes verwendet werden.

[top]

Helper

Bei genauerem Betrachten des obigen Beispiels, fällt in der vierten Zeile das h(…) auf. Dieser kleine Funktionsaufruf ist ein essenzieller Bestandteil von Rails, denn er dient dem Escapen von Sonderzeichen. So wird z.B. das häufig zu SQL-Incection-Angriffen verwendete einfache Hochkommata durch seine HTML-Repräsentation ersetzt.
Es gibt eine Menge von vorgefertigten Helpern, welche den Templates zur Verfügung stehen, so dass im Folgenden nur eine Auswahl aufgezeigt wird:

Format-Helper
Link-Helper
Form-Helper
Field-HelperAnlegen von eigenen Helpern
Sollten die vordefinierten Helper nicht ausreichen, so kann man sich eigene Helper definieren. Gespeichert werden diese beispielsweise für den Controller login in der folgenden Datei:
App/helpers/login_helper.rb
[top]