O'Reilly logo

Rails Kochbuch by Rob Orsini

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

First
|
165
Max.
Linie
Max.
Linie
Kapitel 5
KAPITEL 5
Action View
5.0 Einführung
Action View fungiert als Präsentationsschicht (View) des MVC-Entwurfsmusters (Model
View Controller). Es handelt sich also um die Komponente, die für die Behandlung der
Präsentationsdetails Ihrer Rails-Anwendung verantwortlich ist. Eingehende Requests wer-
den an Controller weitergeleitet, die wiederum View-Templates rendern. View-Templates
können dynamisch Ausgaben erzeugen, die auf den Datenstrukturen basieren, die ihnen
über die zugehörigen Controller zur Verfügung gestellt werden. Es ist diese dynamische
Präsentation, die es Action View ermöglicht, die Details der Darstellung von der eigentli-
chen Geschäftslogik Ihrer Anwendung zu trennen.
Rails wird mit drei Arten von View-Template-Systemen ausgeliefert. Die für einen
bestimmten Request verwendete Template-Engine wird über die Dateierweiterung der zu
rendernden Template-Datei bestimmt. Diese drei Template-Systeme und die ihre Aus-
führung anstoßenden Dateierweiterungen sind: ERb-Templates (*.rhtml),
Builder::Xml-
Markup
-Templates (*.rxml) und JavaScriptGenerator- oder RJS-Templates (*.rjs).
ERb-Templates werden häufig genutzt, um die HTML-Ausgabe einer Rails-Anwendung
zu generieren. Sie werden auch genutzt, um E-Mail-Nachrichten zu generieren (was aber
erst in Kapitel 9 diskutiert wird). Sie bestehen aus Dateien, die mit der Dateierweiterung
.rthml enden. ERb-Templates enthalten eine Mischung aus HTML, normalem Text und
speziellen ERb-Tags, die Ruby-Code in die Templates einbetten, etwa so
<% Ruby-Code %>
oder so <%= Ausgabestring %> oder so <%- Ruby-Code (mit getrimmtem Whitespace) -%>. Das
Gleichheitszeichen steht für ein Tag, das das String-Resultat eines Ruby-Ausdrucks ausge-
ben soll. Tags ohne Gleichheitszeichen sind für reinen Ruby-Code gedacht und erzeugen
keine Ausgabe. Hier sehen Sie ein einfaches Beispiel für ein ERb-Template, das eine Liste
von Buchkapiteln generiert:
<ol>
<% for chapter in @chapters -%>
<li><%= chapter.title %></li>
<% end -%>
<ol>
00____RailsKochbuch.book Seite 165 Dienstag, 3. Juli 2007 8:13 08
Max.
Linie
Max.
Linie
166
|
Kapitel 5: Action View
Links
Ihre Templates können auch andere Subtemplates enthalten, wenn Sie die Option :file in
die
render-Methode in ERb-Ausgabetags einfügen:
<%= render :file => "shared/project_calendar %>
project_calendar.rhtml ist in diesem Fall eine Datei aus dem shared-Verzeichnis des Tem-
plate-Stammverzeichnisses (app/views) Ihres Projekts.
Dieses Kapitel zeigt Ihnen eine Reihe gängiger Techniken, mit deren Hilfe Sie das meiste
aus ERb-Templates herausholen können. Wir zeigen Ihnen auch, wie man dynamisches
XML mit Hilfe von
Builder::XmlMarkup-Templates erzeugt, um beispielsweise RSS-Feeds
zu generieren. Beachten Sie, dass RJS-Templates zwar Teil von Action View sind, ich eine
Diskussion aber bis Kapitel 8 verschiebe.
5.1 Templates mit View-Helpern vereinfachen
Problem
View-Templates sind für die Präsentation gedacht: Sie sollen HTML und eine minimale
zusätzliche Logik enthalten, um die Daten des Modells darzustellen. Sie wollen Ihre View-
Templates von Programmlogik frei halten, die der Präsentation im Weg stehen könnte.
Lösung
Definieren Sie Methoden in einem Helper-Modul, das nach dem Controller benannt ist,
dessen Views die Methoden nutzen. In diesem Fall legen Sie die Helper-Methoden
display_new_hires und last_updated innerhalb eines Moduls namens IntranetHelper
(benannt nach dem Intranet-Controller) an.
app/helpers/intranet_helper.rb:
module IntranetHelper
def display_new_hires
hires = NewHire.find :all, :order => 'start_date desc', :limit => 3
items = hires.collect do |h|
content_tag("li",
"<strong>#{h.first_name} #{h.last_name}</strong>" +
" - #{h.position} (<i>#{h.start_date}</i>)")
end
return content_tag("b", "New Hires:"), content_tag("ul",items)
end
def last_updated(user)
%{<hr /><br /><i>Seite zuletzt aktualisiert am #{Time.now} durch #{user}</i>}
end
end
00____RailsKochbuch.book Seite 166 Dienstag, 3. Juli 2007 8:13 08
Max.
Linie
Max.
Linie
5.1 Templates mit View-Helpern vereinfachen
|
167
Rechts
Innerhalb des Index-Views Ihres Intranet-Controllers können Sie die Helper-Methoden
aufrufen wie jede andere Systemmethode auch.
app/views/intranet/index.rhtml:
<h2>Intranet Homepage</h2>
<p>Pick the Hat to Fit the Head -- October 2004. Larry Wall sagte einmal, das Information
nützlich sein soll und das die Form, in der diese Information präsentiert wird, zu ihrem
Wert beiträgt. Bei O'Reilly Media bieten wir Ihnen verschiedene Möglichkeiten, an
technische Informationen zu gelangen. Tim O'Reilly spricht darüber in seinem
vierteljährlichen Rundbrief für den O'Reilly-Katalog.,</p>
<%= display_new_hires %>
<%= last_updated("Goli") %>
Diskussion
Helper-Methoden werden in Rails als Module implementiert. Wenn Rails einen Control-
ler generiert, erzeugt es auch ein Helper-Modul im app/helpers-Verzeichnis, das nach dem
Controller benannt ist. Standardmäßig sind in diesem Modul definierte Methoden im
View des dazugehörigen Controllers verfügbar. Abbildung 5-1 zeigt die Ausgabe der Hel-
per-Methoden
display_new_hires und last_updated.
Wenn Sie Helper-Methoden mit anderen Controllern teilen wollen, müssen Sie explizite
Helper-Deklarationen in Ihren Controller eintragen. Sollen beispielsweise die Methoden
Abbildung 5-1: Das Ergebnis des display_new_hires-View-Helpers
00____RailsKochbuch.book Seite 167 Dienstag, 3. Juli 2007 8:13 08

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required