Websiteentwicklung: Ruby on Rails: Views, Partials und Layouts
Dazu gibt es einen Rails Guide [1] Layouts and Rendering |
Beim Schreiben der View ist Dir vielleicht aufgefallen, dass nirgendwo ein head oder body zu lesen ist. Diese Teile der Webseite, die für die einzelnen Seiten der Applikation gleich sind, werden nicht in der View selbst gespeichert:
Layout
BearbeitenFür eine einfache Webapplikation brauchen wir nur ein Layout: es heisst application.html.erb.
Die vom Scaffold erstellte Datei enthält HTML5, und an vier Stellen Ruby:
- ein Link zum (gesammelten) Stylesheet
- ein Link zum (gesammelten) Javascript
- ein Tag der Code einfügt, der Cross Site Request Forgeries verhindert
- der Befehl yield, hier wird die View eingefügt
Eine Veränderung im Layout kann beim Verständnis der Applikation helfen: Im Titel geben wir automatisch den Controller und die Action aus:
<title><%= controller.controller_name %> : <%= controller.action_name %></title>
Partials
BearbeitenEinfaches Partial
BearbeitenIn den Views edit.html.erb und new.html.erb wird genau das selbe Formular verwendet. Dieses Formular ist deswegen nur einmal gespeichert, in einem Partial. In beiden Views steht nur
<%= render "form" %>
Achtung: damit wird die Datei _form.html.erb geladen! (Beachte den Unterstrich!)
Das Partial selbst enthält einfach den Code mit dem Formular.
Partial mit Schleife
BearbeitenDie Darstellung der hallo-Meldungen in show und index können wir auch vereinheitlichen. Wir erzeugen ein Partial _meldung.html.erb', das eine einzelne Meldung darstellt. Diese Meldung ist in der Varialbe meldung zu finden - das ergibt sich aus dem Dateinamen des Partials:
<div class="meldung"> <p><%=h meldung.von %> sagt:</p> <blockquote><%=h meldung.meldung %></blockquote> </div>
Dieses Partial kann nun in der View von show einfach aufgerufen werden:
<%= render :partial => "meldung", :object => @hallo %>
In der View von index war bisher eine Schleife über das Array @hallos nötig. Dies entfällt mit dem Aufruf des Partials mit dem Argument :collection:
<%= render :partial => "meldung", :collection => @hallos %>
Absolute Links und URLs vermeiden
BearbeitenWir haben schon verschiedene Methoden kennen gelernt, wie wir vermeiden können fixe URLs zur programmieren:
<%= link_to 'Edit', edit_hallo_path(@hallo) %> | <%= link_to 'Back', hallos_path %> <%= stylesheet_link_tag "application", :media => "all" %>
Analoges gibt es auch noch für Bilder:
<%= image_tag("rails.png") %>
Für Javascript gibt es auch eine Standard-Einstellung, damit wird normalerweise jquery geladen:
<%= javascript_include_tag "application" %>
Hinter all diesen Tags steckt fortgeschrittene Magie: die Asset Pipeline.
Dazu gibt es einen Rails Guide [3] Asset Pipeline |
Quellen
Bearbeiten- ↑ Rails Guide Layouts and Rendering
- ↑ Rails API AssetTagHelper
- ↑ Rails Guide Asset Pipeline