Websiteentwicklung: Ruby on Rails: Views, Partials und Layouts

Rails Guide 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:

Rails layouts views partials.png



LayoutBearbeiten

Fü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>
 

PartialsBearbeiten

Einfaches PartialBearbeiten

In 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 SchleifeBearbeiten

Die 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 vermeidenBearbeiten

  Siehe dazu die Rails API[2] AssetTagHelper

Wir 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




QuellenBearbeiten

  1. Rails Guide Layouts and Rendering
  2. Rails API AssetTagHelper
  3. Rails Guide Asset Pipeline