Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort des Fachgutachters
Einleitung
1 Einführung
2 Installation
3 Erste Schritte
4 Einführung in Ruby
5 Eine einfache Bookmarkverwaltung
6 Test-Driven Development
7 Rails-Projekte erstellen
8 Templatesystem mit ActionView
9 Steuerzentrale mit ActionController
10 Datenbankzugriff mit ActiveRecord
11 E-Mails verwalten mit ActionMailer
12 Nützliche Helfer mit ActiveSupport
13 Ajax on Rails
14 RESTful Rails und Webservices
15 Rails mit Plug-ins erweitern
16 Performancesteigerung
17 Sicherheit
18 Veröffentlichen einer Rails-Applikation auf einem Server

Download:
- ZIP, ca. 6,7 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Ruby on Rails 2 von Hussein Morsy, Tanja Otto
Das Entwickler-Handbuch
Buch: Ruby on Rails 2

Ruby on Rails 2
geb., mit DVD
699 S., 39,90 Euro
Galileo Computing
ISBN 978-3-89842-779-1
Online bestellenPrint-Version jetzt bestellen
* versandkostenfrei in (D) und (A)
Pfeil 5 Eine einfache Bookmarkverwaltung
  Pfeil 5.1 Rails-Projekt erstellen
  Pfeil 5.2 Weitere Views anlegen
  Pfeil 5.3 Layout
  Pfeil 5.4 Model
  Pfeil 5.5 CRUD - Create - Read - Update - Delete
  Pfeil 5.6 Fehlerbehandlung in Formularen
  Pfeil 5.7 Flash-Messages
  Pfeil 5.8 Refaktorisierung mit Helper und Partials
  Pfeil 5.9 Authentifizierung
  Pfeil 5.10 Routing
  Pfeil 5.11 RESTful Rails
  Pfeil 5.12 Darstellungsformate in RESTful Rails
  Pfeil 5.13 Ajax


Galileo Computing - Zum Seitenanfang

5.6 Fehlerbehandlung in Formularen  topZur vorigen Überschrift

Keine Fehler- meldung

Wenn wir unser Formular zur Neuanlage eines Bookmarks leer absenden ( http://localhost:3000/bookmarks/new ), wird keine Fehlermeldung ausgegeben, dass der Datensatz nicht gespeichert werden konnte, weil Titel und URL fehlen.

Im Model (bookmark.rb) haben wir festgelegt, dass Titel und URL gesetzt sein müssen, um einen neuen Datensatz zu speichern:

Listing  app/models/bookmark.rb

class Bookmark < ActiveRecord::Base
  validates_presence_of :title
  validates_presence_of :url
end

Und im Bookmarks-Controller haben wir in der Action create festgelegt, dass, wenn der Datensatz nicht gespeichert werden konnte, wieder das Formular angezeigt werden soll:

def create
  @bookmark = Bookmark.new(params[:bookmark])
  if @bookmark.save
    redirect_to :action => "index"
  else
    render :action => "new"
  end
end

Das heißt, das Formular wird so lange angezeigt, bis diese beiden Felder ausgefüllt sind. Damit der Benutzer des Formulars das versteht, wäre es sinnvoll, eine Fehlermeldung auszugeben, die ihn darauf hinweist, warum kein neuer Bookmark angelegt wurde.

fieldWithErrors

Interessanterweise hat Rails schon etwas getan, was man aber noch gar nicht sieht. Wenn Sie das Formular einmal leer absenden und sich dann den HTML-Code des Formulars ansehen, wurde um die beiden Textfelder für die Eingabe des Titels und der URL, die wir im Model als Pflichtfelder definiert haben, ein div -Block gesetzt mit der Klasse fieldWithErrors:

Listing  HTML-Code new.html.erb

<p>
  <label for="bookmark_title">Titel</label>
  <div class="fieldWithErrors" >
    <input id="bookmark_title" name="bookmark[title]"
    size="30" type="text" value="" />
  </div>}
</p>

CSS anpassen

Diese CSS-Klasse müssen wir einfach nur in unserer CSS-Datei (global.css) anlegen und zum Beispiel die Hintergrundfarbe auf Rot setzen:

Listing  Eintrag in global.css

.fieldWithErrors {
  background-color: red;
}

Wenn Sie jetzt das Formular noch einmal leer absenden, werden die Bereiche hinter den beiden Eingabefeldern für Titel und URL rot eingefärbt:

Abbildung  Eingefärbte fehlerhafte Bereiche

Fehlerausgaben

Nun werden die fehlerhaften Felder zwar farblich markiert, aber wir zeigen noch keinen Fehlertext an. Dafür gibt es einen ActionView-Helper: error_messages_for, den wir in dem View new.html.erb einsetzen:

Listing  app/views/bookmarks/new.html.erb

<% @title = "neu" %>
<h2>Neuen Favorit erstellen</h2>
<%= error_messages_for(:bookmark)%>
<% form_for :bookmark, :url => {:action=>"create"} do |f|%>
  ...
<% end %>

Wenn wir jetzt das Formular wieder leer absenden, wird folgender Fehlertext ausgegeben:

Abbildung  Automatisch generierte Fehlermeldung

Deutsche Fehlermeldungen

Die Fehlermeldung ist leider auf Englisch. Es gibt Plug-ins (Abschnitt 15.2.2 ), mit denen man das Problem lösen kann, oder man kann auch selbst eine Lösung programmieren. Die einfachere Lösung ist aber, zu jedem Feld, das nicht ausgefüllt wurde, eine Fehlermeldung auszugeben. Den dafür benötigten Fehlertext können wir im Model angeben:

Listing  app/models/bookmark.rb

class Bookmark < ActiveRecord::Base

  validates_presence_of :title,
  			:message => "Bitte Titel eingeben"
  validates_presence_of :url,
  			:message => "Bitte URL eingeben"
end

error_messages_on

In dem View new.html.erb setzen wir dann einen anderen ActionView-Helper ein: error_message_on . Diesen Helper setzen wir zu jedem Input-Feld in dem Formular, auch wenn nicht jedes ein Pflichtfeld ist. Sollte sich das aber einmal ändern, haben wir die Ausgabe der Fehlermeldung schon vorgesehen und müssen nur noch im Model den Text angeben. Den Eintrag <%= error_messages_for(:bookmark) %> von eben löschen wir wieder aus der new.html.erb:

Listing  app/views/bookmarks/new.html.erb

<% @title = "neu" %>
<h2>Neuen Favorit erstellen</h2>

<% form_for :bookmark, :url => {:action => "create"} do |f| %>
<p>
  <label for="bookmark_title">Titel</label>
  <%= f.text_field :title %>
  <%= error_message_on(:bookmark, :title)%>
</p>
<p>
  <label for="bookmark_url">URL</label>
  <%= f.text_field :url %>
  <%= error_message_on(:bookmark, :url)%>
</p>
<p>
  <label for="bookmark_comment">Kommentar</label>
  <%= f.text_area :comment %>
  <%= error_message_on(:bookmark, :comment)%>
</p>
<p>
  <%= submit_tag "speichern" %>
</p>

<% end %>

formError

Bei einem Test im Browser sehen wir, dass der Fehlertext ausgegeben wird. Wenn wir den Text rot formatieren möchten, schauen wir im HTML-Code nach, wie die Klasse heißt, die Rails für uns um diesen Text gesetzt hat:

<div class="formError">Bitte Titel eingeben</div>

Die Klasse formError legen wir dann in unserer CSS-Datei an und formatieren den Text darin rot:

Listing  Eintrag in global.css

.formError{
color: red;
}

Bei einem erneuten Test wird unser Fehlertext in roter Schrift im Formular ausgegeben:

Abbildung  Fehlermeldung zu jedem Feld



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






 <<   zurück
  Zum Katalog
Zum Katalog: Ruby on Rails 2






Ruby on Rails 2
Jetzt bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Zend Framework






 Zend Framework


Zum Katalog: AJAX






 AJAX


Zum Katalog: Praxisbuch Web 2.0






 Praxisbuch Web 2.0


Zum Katalog: CSS-Layouts






 CSS-Layouts


Zum Katalog: JavaScript und Ajax






 JavaScript und Ajax


Zum Katalog: Professionelles Webdesign mit (X)HTML und CSS






 Professionelles Webdesign
 mit (X)HTML und CSS


Zum Katalog: Suchmaschinen-Optimierung






 Suchmaschinen-Optimierung


Zum Katalog: XHTML, HTML und CSS






 XHTML, HTML und CSS


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de